我正在使用heightForRow
在GridBagLayout
中生成我的窗口应用程序。我在Eclipse
标签中找到一个漂亮的窗口,如下所示:
但是,当我将其导出到Desing
并启动它时,我得到了这个:
我的代码:
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()
接受尺寸(以像素为单位),这会带来两个不便之处:
因此,问题是:有没有办法根据setMinimumSize()
中使用的组件自动计算最佳窗口大小(就像在预览中一样)?
解决:
正如@trashgod所指出的那样,将jar
移到最后就足够了。
答案 0 :(得分:0)
要解决此问题,请在此行下方找到 container.add(text0,constraints); pack(); 在JFrame类中定义的方法。
答案 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
}