Использование setPreferredSize не учитывается программой - PullRequest
0 голосов
/ 12 декабря 2018

Как мне успешно вызвать 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 голосов
/ 12 декабря 2018

Тем временем мне удалось решить проблему.Просто добавьте

frame.pack();

к методу.

...