2014-05-05 41 views
0

更具體地說,如何通過contentPane調整JFrame大小。如何通過子容器調整父容器大小?

下面是這種情況,我正在做一個400 * 400的JPanel,我需要它來適應JFrame。但是,如果我設置了JFrame setSize(400,400),由於上層窗口標題欄佔用的空間,JPanel的某些部分將被隱藏起來。

我知道我只能測量邊框和標題欄的大小。我只想知道是否有更好的方法去做。


這裏是一個同時Hovercraft Full Of EelsMadProgrammer答案的解決方案。

public class Window extends JFrame { 

    private Window() { 
     createUI(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Window(); 
      } 
     }); 
    } 

    private void createUI() { 
     setContentPane(buildMainPanel()); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private JPanel buildMainPanel() { 
     JPanel mainPanel = new JPanel(); 
      mainPanel.setPreferredSize(new Dimension(500, 640)); 
     mainPanel.setLayout(null); 
     mainPanel.add(new Canvas(0, 0)); 
     return mainPanel; 
    } 

} 

回答

2

覆蓋面板的getPreferredSize方法並返回new Dimension(400, 400)

在框架上調用pack。被調用時,pack將詢問內容窗格的首選大小,通常由佈局管理器計算(遞歸地詢問每個容器的首選大小)。

這將調整窗口大小,以便可視區域(儘可能多)滿足其內容的首選大小。

3

但是如果我設置的JFrame的setSize(400,400),JPanel中的某些部分會由於上層窗口標題欄佔用的空間隱藏起來。

由於最簡單的解決方案就是不設置JFrame大小,所以對於自己來說太難了。相反,在添加所有組件之後,在致電setVisible(true)之前,請在JFrame上調用pack(),並讓其將其自身調整爲適合其組件和佈局管理器的最佳大小。

+0

您能否重讀我的問題,我更新了它。 – bijiDango

+0

@bijiDango:按照MadProgrammer的建議。 –