2016-08-06 8 views
2

私はJLayeredPaneを使ってSwing GUIで作業しています。 JFrameにはJLayeredPaneがあり、2つの数字を含んでいます。後でJPanelにいくつかのコンポーネントを表示したいので、コードのこの部分を短くするためにこの部分を切り捨てます。JLrameをJLayeredPane内のJPanelsにリサイズ

JFrameのサイズをJPanelのサイズに変更するにはどうすればよいですか? frame.pack()が動作せず、GUIが最小サイズで表示される推奨サイズの行を設定しないと、

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridBagLayout; 

import javax.swing.JFrame; 
import javax.swing.JLayeredPane; 
import javax.swing.JPanel; 

public class TestGUI { 
    private JFrame frame; 
    private JLayeredPane layeredPane; 
    private JPanel panelBottom; 
    private JPanel panelTop; 
    private MainMenuBar menuBar; 

    public TestGUI() { 
     // panel bottom: 
     panelBottom = new JPanel(); 
     panelBottom.setSize(1000, 500); 
     panelBottom.setBackground(new Color(0, 100, 0, 100)); 
     panelBottom.setLayout(new GridBagLayout()); 
     // panel top: 
     panelTop = new JPanel(); 
     panelTop.setSize(950, 450); 
     panelTop.setBackground(new Color(0, 0, 100, 100)); 
     panelTop.setLayout(new GridBagLayout()); 
     // layered pane: 
     layeredPane = new JLayeredPane(); 
     layeredPane.add(panelBottom, 1); 
     layeredPane.add(panelTop, 0); 
     // frame building: 
     frame = new JFrame(); 
     menuBar = new MainMenuBar(); 
     frame.setJMenuBar(menuBar); 
     frame.setLayout(new BorderLayout()); 
     frame.setPreferredSize(new Dimension(1100, 600)); // <-- Without this the GUI will be very small 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(layeredPane, BorderLayout.CENTER); 
     frame.pack(); // <-- does not work! 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new TestGUI(); 
    } 
} 

編集:私はちょうど最大のJPanelのに合わせて適切なサイズのラインを変更することができ、私はJFrameJPanelの動的のサイズに応じてサイズを変更したいので、私は質問をします。

答えて

3

How to Use Layered Panes: Laying Out Components in a Layered Paneで提案されているように、「レイヤードペインにはデフォルトでレイアウトマネージャがありませんが、レイヤードペインにレイアウトマネージャを割り当てることはできます」パネルを重ねる場合は、OverlayLayouthere参照)を使用してください。また

は、herehere示すようないは、内部フレーム個別pack()にあなたをできるようにJInternalFrameを、使用しています。

+2

助けてくれてありがとう! OverlayLayoutを使って作業しました! – ConveniencePatterns