从paintComponent方法调整大小

时间:2012-11-07 21:52:24

标签: java swing jpanel paintcomponent preferredsize

我有这个小代码

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()框架未调整大小到嵌套面板的大小。我已经阅读了这个主题的相关答案,但没有一个有帮助。你能帮我解决一下吗?

2 个答案:

答案 0 :(得分:4)

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

但请勿从setPreferredSize致电paintComponent()。你在paintComponent中的绘画没有别的。避免将程序逻辑放入该方法中。绘画操作应该快速和优化,以获得更好的性能和用户体验。有关详细信息,请参阅Performing Custom Painting

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

另见Should I avoid the use of set[Preferred|Maximum|Minimum]Size methods in Java Swing

答案 1 :(得分:2)

    public MyPanel() {
        setPreferredSize(new Dimension(640, 480));
    }