2016-10-23 10 views
-1

次のコードでは、両方のパネルが見えるはずですが、黄色のものしか見ることができず、フレームのすべてのサイズが必要です。同じフレームに2つのパネルを表示する

class NewFrame extends JFrame implements ComponentListener {  

    public NewFrame() { 

     this.setSize(600, 600); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(new BorderLayout()); 
     //panel.setSize(300,300); 
     panel.setBackground(Color.pink); 

     JPanel panel2 = new JPanel(new BorderLayout()); 
     panel2.setBackground(Color.yellow); 
     panel2.setSize(300,300); 
     this.add(BorderLayout.EAST,panel); 
     this.add(BorderLayout.CENTER,panel2); 

     this.setVisible(true); 
    } 
} 

答えて

0

あなたは(実際にはここでは必要ありません)あなたのパネルにレイアウトマネージャを割り当てられてではなく、その親コン​​テナを基準にしています。レイアウトマネージャーを使用せずにコンテナにパネルを配置すると、配置されたパネルは互いの上に配置されます。つまり、配置された最後のパネルのみが表示されます。

あなたのJFrameののcontentPaneにBorderLayoutマネージャを割り当てる必要があります:

Container cp = this.getContentPane(); 
cp.setLayout(new BorderLayout()); 

それからそれへのあなたのパネルを追加:

cp.add(BorderLayout.EAST,panel); 
cp.add(BorderLayout.CENTER,panel2); 

あなたはまだそれのでEASTパネルは表示されませんコンポーネントを含んでいません。 BorderLayoutでは、CENTER領域は常に可能な限り多くの領域を塗りつぶし、他の領域は必要な領域だけを塗りつぶします。

+0

感謝します。実際には同じ質問があります。たとえば、フレームのサイズを800x800に、さらに両方のパネルのsetPreferredSizeを200x200に増やしても、フレームがパネルのサイズよりも大きいにもかかわらず、黄色のパネルはフレームのサイズをすべて満たします。この現象はどこから起こりますか? – matel

+0

@matel:説明を追加しました。 –

+0

ありがとう、申し訳ありませんが、私はまだ誤解しています。 EASTパネルのサイズを400、センターを200に設定すると、センターはまだ大きくなります。可能な限り多くのスペースを常に満たしていると言うステートメントは、完全に正確ではないかもしれませんか? EASTのスペースは一定量に制限されていますか? – matel

-1

あなたのコードに間違いがあります。すべての利用可能なスペースを占有するように

this.add(panel, BorderLayout.EAST); 
this.add(panel2, BorderLayout.CENTER); 

BorderLayout.CENTERpanel2のサイズを変更します。したがって、サイズを変更できないように好ましいサイズをpanelに指定する必要があります。

class NewFrame extends JFrame { 
    public NewFrame() { 
     this.setSize(600, 600); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.setPreferredSize(new Dimension(300,300)); 
     panel.setBackground(Color.pink); 

     JPanel panel2 = new JPanel(new BorderLayout()); 
     panel2.setBackground(Color.yellow); 
     panel2.setSize(300,300); 

     this.add(panel, BorderLayout.EAST); 
     this.add(panel2, BorderLayout.CENTER); 

     this.setVisible(true); 
    } 
} 
+0

あなたの答えでは、たとえばフレームのサイズを800x800に、さらに黄色のパネルのsetPreferredSizeを300x300に増やしても、パネルのサイズよりも大きいにもかかわらずフレームのサイズがすべて満たされます。この現象はどこから起こりますか? – matel

+0

イエローパネルのサイズを変更しなくても、使用可能なスペースをすべて占めるように、高さと幅が変更されるようになりました。これは 'BorderLayout.CENTER'を使用するためです。 'BorderLayout'に特化しています –

+0

本当に、Frank Puffer ???私は自分の言葉をコードで確認してうれしいです。 –

関連する問題