创建完一个窗口后,它应该是完全黑色的,右侧和底部边缘都有白色。我可能做错了什么?

这是我初始化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?
在组件的构造函数中构造一个框架,该组件不必关心它的显示方式,而应该专注于它的工作。

09-27 14:02