2

我有这个小代码

public class Test extends JFrame {

public static void main(String[] args) {
    new Test();
}

Test() {
    getContentPane().add(new MyPanel());

    pack();
    setVisible(true);
}

private class MyPanel extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        setSize(640, 480);
        setPreferredSize(new Dimension(640, 480));
        setMinimumSize(new Dimension(640, 480));
        g.fillRect(20, 20, 50, 50);
    }

}

不幸的是,在调用pack(). 我已经阅读了该主题的相关答案,但没有一个有帮助。请给我一个解决方案好吗?

4

2 回答 2

4

执行时pack(),面板仍然不可见,并且paintComponent()未执行,因此也未执行setPreferredSize()

但不要setPreferredSizepaintComponent(). 只做你的画paintComponent。避免将程序逻辑放入该方法中。绘画操作应该是快速和优化的,以获得更好的性能和用户体验。有关详细信息,请参阅执行自定义绘画。

覆盖面板的getPrefferedSize(),或至少在 之前执行 setPreferedSize pack()

另请参阅是否应该避免在 Java Swing 中使用 set[Preferred|Maximum|Minimum]Size 方法

于 2012-11-07T21:59:13.470 回答
2
    public MyPanel() {
        setPreferredSize(new Dimension(640, 480));
    }
于 2012-11-07T21:59:02.743 回答