2

私はこの小さなコードを持っています

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()。私はすでにこのトピックに関連する回答を読みましたが、どれも役に立ちませんでした。解決策を教えていただけませんか。

4

2 に答える 2

4

pack()実行されると、パネルはまだ非表示であり、paintComponent()実行されなかったため、結果setPreferredSize()としても実行されませんでした。

setPreferredSizeただし、からは呼び出さないでくださいpaintComponent()paintComponent他に何もせずに絵を描いてください。そのメソッドにプログラムロジックを入れないでください。ペイント操作は、パフォーマンスとユーザーエクスペリエンスを向上させるために、高速で最適化する必要があります。詳細については、カスタムペイントの実行を参照してください。

パネルのgetPrefferedSize()をオーバーライドするか、少なくとも前にsetPrefferedSizeを実行しpack()ます。

また、JavaSwingでset[Preferred | Maximum |Minimum]Sizeメソッドを使用しないようにする必要があるも参照してください。

于 2012-11-07T21:59:13.470 に答える
2
    public MyPanel() {
        setPreferredSize(new Dimension(640, 480));
    }
于 2012-11-07T21:59:02.743 に答える