setPreferredSize的使用被程序忽略

时间:2018-12-11 23:29:39

标签: layout swingx

如何在方法中成功调用setPreferredSize?我给setPreferredSize打电话了两次。如果我在构造函数中删除该调用,则面板根本不会出现,而之前它的大小是不希望的(500,300)。这说明setPreferredSize是在构造函数中执行的,而不是在同一类的方法中执行的。请注意,这是我的代码唯一的问题(就我所测试的而言)。在下面的代码之外没有任何意外的干扰。

...
public abstract class XYGrapher extends JPanel{
    ...
    JFrame frame;
    JPanel contentPane;
    ...
    public XYGrapher() {
        frame = new JFrame("Grapher");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setPreferredSize(new Dimension(500, 300));
        contentPane.setLayout(new SpringLayout());
        this.setPreferredSize(new Dimension(500, 300));
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
        contentPane.add(this);
    }
    //
    public void drawGraph(int xPixelStart, int yPixelStart, int pixelsWide, int pixelsHigh) {
        ...
        contentPane.setPreferredSize(new Dimension(pixelsWide, pixelsHigh));
        this.setPreferredSize(new Dimension(pixelsWide, pixelsHigh));
        ...
    }
    //*/
}

作为参考,这是最终使用XYGrapher的方式:

public class GrapherTester extends XYGrapher{
    ...
    public static void main(String[] args) {
            GrapherTester g = new GrapherTester();
            g.drawGraph(0,0,100,100);
    }
}

1 个答案:

答案 0 :(得分:0)

在此期间,我设法解决了这个问题。只需添加

frame.pack();

该方法。