setPreferredSize 的使用被程序忽略
Use of setPreferredSize is disregarded by program
如何在方法中成功调用setPreferredSize?我正在调用 setPreferredSize 两次。如果我删除构造函数内部的调用,则面板根本不会出现,而它之前出现时的大小是不需要的 (500,300)。这说明setPreferredSize是在构造函数中执行的,而不是在同一个class的方法中执行的。请注意,这是我的代码的唯一问题(据我测试);下面的代码之外没有意外的干扰。
...
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);
}
}
同时我已经设法解决了这个问题。只需添加
frame.pack();
方法。
如何在方法中成功调用setPreferredSize?我正在调用 setPreferredSize 两次。如果我删除构造函数内部的调用,则面板根本不会出现,而它之前出现时的大小是不需要的 (500,300)。这说明setPreferredSize是在构造函数中执行的,而不是在同一个class的方法中执行的。请注意,这是我的代码的唯一问题(据我测试);下面的代码之外没有意外的干扰。
...
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);
}
}
同时我已经设法解决了这个问题。只需添加
frame.pack();
方法。