0

コンテナが構築されてからしばらくすると、実際にサイズが変化していることがわかりました

それが構築されたら、コンポーネントを必要な場所 (右端から 30 ピクセル離れた場所など) に設定しますが、しばらくすると、1008x730 から 1018x740 に変わることがわかります...

(私の JFrame は 1024x768 です)

なぜこれが起こるのか、この自動サイズ変更を止める方法を知っている人はいますか?

ありがとうございました。

私はちょうどやった -

while (true) {
        System.out.println(c.getSize());
}

数回繰り返した後、サイズが変更されました。

〜編集済み

4

3 に答える 3

2

コンポーネントのサイズを変更し、を呼び出したに再検証するようなことをしているようです。また、 を呼び出すよりも、コンポーネントの優先サイズを設定して配置させるほうがよい場合がよくあります。pack()JFramesetSize()LayoutManager

補遺: 通常、初期サイズを正しくするにはpack()最上位のコンテナーで呼び出す方が適切です。また、 のコンテンツ ペインはJFrameデフォルトで に設定されBorderLayoutますが、これは望ましくない場合があります。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyPanel extends JPanel {

    public MyPanel() {
        this.setLayout(new GridLayout(2, 2));
        this.setPreferredSize(new Dimension(320, 240));
        for (int i = 0; i < 4; i++) {
            JLabel label = new JLabel(String.valueOf(i));
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setBorder(BorderFactory.createLineBorder(Color.blue));
            this.add(label);
        }

    }

    private static void create() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                create();
            }
        });
    }
}
于 2010-01-30T17:20:44.487 に答える
1

これを IDE から実行したり、デバッガーを使用してリモートで接続したりできる場合、サイズを設定するメソッドにブレークポイントを設定するだけで非常に簡単になります。

または、代わりに、独自のクラスで JFrame をサブクラス化し、同様にそれらのメソッドをオーバーライドして、

try { throw new Exception("here!"); } catch(Exception e) { e.printStackTrace(); }

これにより、サイズの変化の原因がわかります。

于 2010-01-30T15:49:59.810 に答える
1

レイアウト マネージャーが起動しているように聞こえます。Swing Explorer を実行して、世界がどうなるかを確認してください。

于 2010-01-30T17:18:28.437 に答える