Java 设置JPanel'的问题;s颜色

Java 设置JPanel'的问题;s颜色,java,swing,canvas,jpanel,Java,Swing,Canvas,Jpanel,下面是我的canvas类扩展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 paintC

下面是我的canvas类扩展
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
的颜色,并在构造函数中设置颜色,但这些都不起作用。怎么了


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

在paintComponent方法中,您不必使用setBackground来更改JPanel的颜色。这应该在组件外部完成。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);
}
还要注意,颜色常数都是大写的。i、 黑色或绿色


如果要动态更改背景颜色,则可以在事件处理程序(如mouseEntered或actionPerformed等)中执行此操作。

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

如果你想要一个绿色的背景,按照@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);
}
编辑


我忘了超级

文森特·拉姆达尼是对的。有关更多信息,请参见