创建完一个窗口后,它应该是完全黑色的,右侧和底部边缘都有白色。我可能做错了什么?
这是我初始化window的构造函数:
public Panel()
{
Thread t = new Thread(this);
addKeyListener(this);
setFocusable(true);
this.setPreferredSize(new Dimension(gameWidth, gameHeight));
JFrame f = new JFrame("AlienBusters");
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
t.start();
}
这是我使窗户变黑的涂漆方法:
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, gameWidth, gameHeight);
}
最佳答案
五件事
在setResizable
之后调用pack
这不是一个好主意,setResizable
可以更改框架边框的大小,这会影响可用内容的大小...
认真地使用KeyListener
,请参阅How to Use Key Bindings并避免头痛。
依靠魔术数字而不是英制数值,g.fillRect(0, 0, gameWidth, gameHeight);
应该是g.fillRect(0, 0, getWidth(), getHeight());
或更好,只需使用setBackground(Color.BLACK)
并通过super.paintComponent
免费获取它,而paintComponent
应该是protected
;)
调用setPreferredSize
。这意味着可以更改大小,这可能不是您真正想要的。而是改写getPreferredSize
。有关更多详细信息,请参见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?
在组件的构造函数中构造一个框架,该组件不必关心它的显示方式,而应该专注于它的工作。