2016-08-06 3 views
2

JLayeredPane을 사용하여 스윙 GUI에서 작업하고 있습니다. JFrame에는 JLayeredPane이 있으며 여기에는 두 개의 JPanel이 포함되어 있습니다. 나중에 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에 맞게 적절한 사이즈 라인을 변경할 수 있지만, 나는 JPanel의 동적의 크기에 따라 크기를 조정 JFrame를 원하기 때문에 내가 질문을.

답변

3

How to Use Layered Panes: Laying Out Components in a Layered Pane에서 "기본적으로 계층화 된 창에는 레이아웃 관리자가 없지만 레이아웃 관리자에 레이아웃 관리자를 할당 할 수 있습니다." 중첩 패널의 경우 OverlayLayout (here 참조)을 사용하십시오. 또한

herehere 같이 않습니다이 내부 프레임을 개별적으로 pack()에 당신을 허용 JInternalFrame를 사용합니다.

+2

도움을 주셔서 감사합니다! OverlayLayout 사용이 효과적입니다! – ConveniencePatterns

관련 문제