我将JPanel设置为我的JFrame的contentPane。
当我使用时:
jPanel.setBackground(Color.WHITE);
不应用白色。
但是当我使用时:
jFrame.setBackground(Color.WHITE);
它有效......我对这种行为感到惊讶。它应该是相反的,不应该吗?
SSCCE:
这是一个SSCCE:
主类:
public class Main {
public static void main(String[] args) {
Window win = new Window();
}
}
窗口类:
import java.awt.Color;
import javax.swing.JFrame;
public class Window extends JFrame {
private Container mainContainer = new Container();
public Window(){
super();
this.setTitle("My Paint");
this.setSize(720, 576);
this.setLocationRelativeTo(null);
this.setResizable(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainContainer.setBackground(Color.WHITE); //Doesn't work whereas this.setBackground(Color.WHITE) works
this.setContentPane(mainContainer);
this.setVisible(true);
}
}
容器类:
import java.awt.Graphics;
import javax.swing.JPanel;
public class Container extends JPanel {
public Container() {
super();
}
public void paintComponent(Graphics g) {
}
}
答案 0 :(得分:3)
原因很简单,包括以下一行
super.paintComponent(g);
当你覆盖paintComponent时。
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
现在它完美无缺。
除非您有非常具体的理由,否则您应该始终这样做。
[PS:将颜色更改为红色或更深的颜色以注意差异,因为有时难以区分JFrame
的默认灰色和白色颜色]
答案 1 :(得分:1)
使用我的测试代码,它的工作方式与预期的方式相同:
public class Main {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(new Dimension(400,400));
f.setLocationRelativeTo(null);
JPanel p = new JPanel();
p.setSize(new Dimension(20,20));
p.setLocation(20, 20);
//comment these lines out as you wish. none, both, one or the other
p.setBackground(Color.WHITE);
f.setBackground(Color.BLUE);
f.setContentPane(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}