使用Java Swing优化窗口大小

时间:2015-11-14 11:00:11

标签: java swing

我正在使用heightForRowGridBagLayout中生成我的窗口应用程序。我在Eclipse标签中找到一个漂亮的窗口,如下所示:

enter image description here

但是,当我将其导出到Desing并启动它时,我得到了这个:

enter image description here

我的代码:

jar

因此,我总是需要手动拉伸窗口以获得正确的尺寸。或者,我可以将import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame; import javax.swing.JTextField; @SuppressWarnings("serial") public class TestFrame extends JFrame { GridBagConstraints constraints; JTextField text0; public TestFrame() { super("Test window"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); Container container = getContentPane(); container.setLayout(new GridBagLayout()); constraints = new GridBagConstraints(); text0 = new JTextField("Some text", 20); constraints.fill=GridBagConstraints.HORIZONTAL; constraints.gridx=0; constraints.gridy=0; container.add(text0, constraints); } public static void main(String args[]) { TestFrame test = new TestFrame(); } } setSize()setMinimumSize()结合使用来实现此目标。

然而,问题是pack()setSize()接受尺寸(以像素为单位),这会带来两个不便之处:

  1. 每次更改组件编号或尺寸后,必须通过反复试验来猜测新的最佳尺寸。
  2. 窗口大小必须适合系统显示设置。
  3. 因此,问题是:有没有办法根据setMinimumSize()中使用的组件自动计算最佳窗口大小(就像在预览中一样)?

    解决: 正如@trashgod所指出的那样,将jar移到最后就足够了。

2 个答案:

答案 0 :(得分:0)

要解决此问题,请在此行下方找到 container.add(text0,constraints); pack(); 在JFrame类中定义的方法。

For more information visit

答案 1 :(得分:0)

这里发生的是在向其添加任何组件之前打包JFrame。所需的JFrame大小为0x0,因为此时没有组件。稍后添加组件不会更改JFrame的大小,除非您设置大小或再次调用pack()

要解决此问题,请将pack();添加到构造函数的末尾。例如:

public TestFrame() {
    super("Test window");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setVisible(true);
    Container container = getContentPane();
    container.setLayout(new GridBagLayout());

    constraints = new GridBagConstraints();
    text0 = new JTextField("Some text", 20);
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.gridx = 0;
    constraints.gridy = 0;
    container.add(text0, constraints);
    pack();//Moved to last line
}