我写了下面的代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JFrame{
public Test() {
this.setTitle("Test");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JPanel jPanel = new JPanel() {
public void paint(Graphics g) {
g.setColor(Color.GREEN);
g.fillOval(100, 100, 100, 100);
g.setColor(Color.BLACK);
g.drawLine(0, 0, 100, 100);
}
};
jPanel.setSize(500, 500);
jPanel.setBackground(Color.RED);
this.add(jPanel);
this.setVisible(true);
this.setSize(500, 500);
}
public static void main(String[] args) {
Test test = new Test();
}
}
我想画一个圆,一条线,并将屏幕的背景颜色更改为红色,但是当我运行程序时,屏幕看起来如下:
代码哪里出错了。坦克你
最佳答案
首先,不要覆盖paint
,而是覆盖paintComponent
。
然后,setBackground
的 javadoc 说:
Direct subclasses of JComponent must override paintComponent to honor this property.
因此,在您的情况下,调用此方法本身不会执行任何操作,除非您调用父类的 paintComponent
(或您自己绘制背景,但那样做太过分了)。
在任何情况下都建议调用 super.paintComponent
,因为父实现可能会执行一些清理或其他有用的操作。
这是您的代码的修改版本,它考虑了所有这些:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JFrame {
public Test() {
this.setTitle("Test");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(final WindowEvent e) {
System.exit(0);
}
});
JPanel jPanel = new JPanel() {
@Override
public void paintComponent(final Graphics g) {
// call parent method
super.paintComponent(g);
// OR paint background yourself :
// g.setColor(getBackground());
// g.fillRect(0, 0, getWidth(), getHeight());
// paint other things
g.setColor(Color.GREEN);
g.fillOval(100, 100, 100, 100);
g.setColor(Color.BLACK);
g.drawLine(0, 0, 100, 100);
}
};
jPanel.setSize(500, 500);
jPanel.setBackground(Color.RED);
this.add(jPanel);
this.setVisible(true);
this.setSize(500, 500);
}
public static void main(final String[] args) {
Test test = new Test();
}
}
关于java - JPanel - 更改 JPanel 的背景颜色时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44439475/