【问题标题】:Problems with setting JPanel's colour设置JPanel颜色的问题
【发布时间】:2011-01-08 13:23:45
【问题描述】:

这是我扩展 JPanel 的画布类:

package start;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Board extends JPanel
{
    private static final long serialVersionUID = 1L;

    public Board() {}

    public void paintComponent(Graphics g) 
    {
        int width = getWidth();
        int height = getHeight();
        this.setBackground(Color.green);

        g.setColor(Color.black);
        g.drawOval(0, 0, width, height);
    }
}

这是我调用它的方法:

private static void createAndShowGUI() 
{

JFrame frame = new JFrame("Hello");
frame.setPreferredSize(new Dimension(700, 700));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Board b = new Board();
frame.getContentPane().add(b);

frame.pack();
frame.setVisible(true);
}

但这会在默认颜色上显示椭圆形。我也尝试不使用this.,然后尝试设置b 的颜色,并在构造函数中设置颜色,但这些都不起作用。怎么了?

编辑:抱歉没有说清楚,我的目标是在绿色背景上显示一个黑色的细椭圆形。

【问题讨论】:

标签: java swing canvas jpanel


【解决方案1】:

在paintComponent 方法中,您不必使用setBackground 来更改JPanel 的颜色。这应该在paintComponent 之外完成。在你改变它之前,paintComponent 可能会使用背景的颜色。

您可以尝试很多方法。一是在构造函数中设置颜色,然后先调用超类的paintComponent,如下:

  public Board() {
         this.setBackground(Color.GREEN);
  }

  public void paintComponent(Graphics g) 
{
    super.paintComponent(g);
    int width = getWidth();
    int height = getHeight();        

    g.setColor(Color.BLACK);
    g.drawOval(0, 0, width, height);
}

还要注意颜色常量都是大写的。即黑色或绿色。

如果您想动态更改背景颜色,则可以在事件处理程序中进行,例如 mouseEntered 或 actionPerformed 等。

【讨论】:

    【解决方案2】:

    虽然代码没有明确说明您的意图是什么,但我尝试解决一些问题:

    如果您想要绿色背景,请按照@vincent 告诉您的操作。您应该在绿色背景中看到一个黑色椭圆形。如果面板不透明,“super.paintComponent”将自动用组件背景填充其区域。

    如果你想要一个白色背景上的绿色椭圆,也许有黑色边框

    public void paintComponent(Graphics g) 
    {
        int width = getWidth();
        int height = getHeight();
    
    
        super.paintComponent(g);
        g.setColor(Color.GREEN);
        g.fillOval(0, 0, width, height);
        g.setColor(Color.BLACK);
        g.drawOval(0, 0, width, height);
    }
    

    编辑

    我忘了超级

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2014-02-04
      相关资源
      最近更新 更多