Java 使用GridBagLayout增加JTextField高度

Java 使用GridBagLayout增加JTextField高度,java,eclipse,Java,Eclipse,我希望在我的应用程序中有跨多行的文本字段。使用GridBagLayout在Eclipse design viewer中获得所需的结果似乎没有问题: 但是,当我将其导出到jar时,我会看到如下窗口: 我的代码: import java.awt.Color; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame

我希望在我的应用程序中有跨多行的文本字段。使用
GridBagLayout
在Eclipse design viewer中获得所需的结果似乎没有问题:

但是,当我将其导出到
jar
时,我会看到如下窗口:

我的代码:

import java.awt.Color;
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);
        setVisible(true);
        Container container = getContentPane();
        container.setLayout(new GridBagLayout());
        container.setBackground(new Color(240,240,240));
        JTextField editableTextField;

        editableTextField = new JTextField("Enter text here");
        constraints = new GridBagConstraints();
        constraints.fill=GridBagConstraints.BOTH;
        constraints.gridheight=2;
        constraints.gridx=0;
        constraints.gridy=0;
        container.add(editableTextField, constraints);

        pack();
    }

    public static void main(String args[]) {
        new TestFrame();
    }
}
我正在使用MacOS 10.9.3下的
Eclipse4.4.1

谁能解释一下,视图的差异来自何处,以及如何在
jar
中获得适当的文本字段高度

如何在中获得适当的文本字段高度

你什么都不做。Swing布局管理器将根据文本字段的字体确定文本字段的适当高度

在本例中,只有一个组件添加到框架中,因此无法告诉文本字段gridHeight为2,因为只有一行。当框架中有多行构件时,将使用该约束。然后可以指定一个组件跨越两行

如果要在文本字段周围留出额外空间,则可以更改边框:

JTextField textField = new JTextField(30);
Border empty = new EmptyBorder(10, 10, 10, 10);
Border compound = new CompoundBorder(textField.getBorder(), empty);
textField.setBorder(compound);
有关更多信息和示例,请阅读上Swing教程的部分


本教程还有一节介绍如何使用GridBagLayout您应该查看有关GridBagConstraints

editableTextField.setPreferredSize(新尺寸(w,h))的更多信息@EddieB编号
setPreferredSize
适用于此用例
setSize
不可接受。@EddieB在具有不同屏幕分辨率的多组件窗口中仍能工作吗?您正在为JTextField设置
preferredSize
而不是
fixedSize。
布局管理器(GridBag)如果不适合其他组件,可以选择忽略大小,因此需要更多上下文来确定<代码>FlowLayout和GridBagLayout管理器使用组件的首选大小(后者取决于您设置的约束),但BorderLayout和GridBagLayout通常不使用。
@请参阅