JFrameのContainer内のJPanelの幅と高さが0であるのはなぜですか?

私は簡単な問題を抱えています。私はそれを解決する方法を知っていなければなりません。 私はこれをしようとしています: 私はJFrameを持っています。 次に、JPanelを作成し、レイアウトをGridLayout(5,5)に設定します。 Finnaly私はこのJPanelをJFrameのContainerに追加します。

私のパネルの幅を取得しようとすると、それは私に0を与えるべきではない? 私はこれを行う:System.out.println(mypanel.getSize()。getWidth());それはゼロだと言っています:c なぜ ?? 私は5を分けることができるようにサイズを知りたいと思うし、それぞれのラベルの塗りつぶし量を知っている、これはラベルのグリッドになります.. ありがとうございます...

    public janela(){

    window = new JFrame("teste");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(300,300);
    contentor = window.getContentPane();
    interior = new JPanel();
    interior.setLayout(new GridLayout(5,5));
    contentor.add(interior);

    System.out.println(interior.getSize().getWidth());   //it says 0 ?!?! why??
     }

事前にみんなに感謝!

2

1 答え

パネルはレイアウトに基づいてサイズが決定されます。具体的には表示され、doLayout()が呼び出されます。 doLayout()は、パネルの適切なサイズがパネルの内容とレイアウトマネージャに基づいてどのようになっているかを調べます。パネルに何もないので、適切なサイズは0、0です。

パネルに何も持っておらず、この(0,0)サイズを回避したい場合は、パネルのgetPreferredSize()をオーバーライドして、パネルがレイアウトを尊重したいサイズを返すことができます。

3
追加された
doLayoutは、ウィンドウが表示されているときにのみ呼び出されます。私がそれを忘れていない限り、サイズを調べる前にsetVisible(true)を呼び出すようにしてください。
追加された 著者 MeBigFatGuy,
あなたの速い返信をありがとう!しかし、私はラベルをパネルに追加しようとしていますが、サイズを取得しようとしましたが、まだゼロです。ここで私のコードを見てください。 pastebin.com/FEtFnK9r ありがとうございます;)
追加された 著者 TiagoM,
固定感謝仲間; D
追加された 著者 TiagoM,