自动调整 JFrame 内 JPanel 的大小
题
我有一个 JPanel 子类,在其中添加按钮、标签、表格等。为了在屏幕上显示它,我使用 JFrame:
MainPanel mainPanel = new MainPanel(); //JPanel subclass
JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
但是当我调整窗口大小时,面板的大小不会改变。即使调整了大小,如何使面板的大小与窗口的大小相同?
解决方案
您可以设置布局管理器BorderLayout的一样,然后确定更具体的,在您的面板应该去:
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);
此使所述面板到所述框架的中心区域,并允许它自动增长调整大小的帧时
其他提示
您需要设置对JFrame使用布局管理器 - 这与组件是如何定位的交易。一个有用的一种是BorderLayout管理。
简单地增加的下面一行代码应解决你的问题:
mainFrame.setLayout(new BorderLayout());
(添加组件到JFrame之前执行此操作)
如果我们的朋友所提供的BorderLayout的选项亘古不变的工作,尝试添加ComponentListerner到JFrame和实施上的componentResized(事件)的方法。当JFrame的对象将被重新调整,这个方法会被调用。因此,如果你写的代码来设置JPanel的大小在该方法中,会达到预期的结果。
雅,我知道这“解决”不是很好,但是用它作为安全网。 ;)
根据我的经验,我使用了 GridLayout。
thePanel.setLayout(new GridLayout(a,b,c,d));
a = 行号,b = 列号,c = 水平间隙,d = 垂直间隙。
例如,如果我想创建面板:
- 无限行(设置 a = 0)
- 1 列(组 b = 1)
- 垂直间隙= 3(设置 d = 3)
代码如下:
thePanel.setLayout(new GridLayout(0,1,0,3));
当您想要将 JScrollPane 添加到 JPanel 时,此方法非常有用。当你在 JScrollPane 中添加一些组件时,JScrollPane 中的 JPanel 的大小会自动改变,因此 JScrollPane 会自动重置滚动条。
由于其他海报说,你需要改变正在使用的布局管理。我使用的GridLayout总是优选因此您的代码将成为:
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);
网格布局似乎更正确的概念对我来说,当你想你的面板占用整个屏幕。