Java 设置JPanel'的问题;s颜色
下面是我的canvas类扩展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
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);
}
编辑
我忘了超级文森特·拉姆达尼是对的。有关更多信息,请参见