这是我的画布类扩展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
的颜色,并在构造函数中设置颜色,但这些都没有奏效。怎么了?
编辑:很抱歉没有说清楚,我的目标是在绿色背景上显示一个薄的黑色椭圆形。
答案 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);
}
编辑
我忘记了超级