设置JPanel颜色的问题

时间:2011-01-08 13:23:45

标签: java swing canvas jpanel

这是我的画布类扩展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的颜色,并在构造函数中设置颜色,但这些都没有奏效。怎么了?

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

2 个答案:

答案 0 :(得分:2)

在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等。

答案 1 :(得分:0)

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

如果你想要一个绿色背景,请像@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);
}

编辑

我忘记了超级