2014-05-05 40 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的建议。 –