Как мне успешно вызвать 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);
}
}