Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么LayoutManager可以将JLabel或JTextField的高度与其字体大小相匹配?_Java_Swing_Layout Manager - Fatal编程技术网

Java 什么LayoutManager可以将JLabel或JTextField的高度与其字体大小相匹配?

Java 什么LayoutManager可以将JLabel或JTextField的高度与其字体大小相匹配?,java,swing,layout-manager,Java,Swing,Layout Manager,我有几个JPanels,其中包含JLabels和JTextFields,用于Swing应用程序中的用户输入 我正在手工编辑NetBeans GUI生成器生成的代码,但仍然希望保持类似的布局 我首先使用了GridLayout。我可以调整hgap使我的JLabels和JTextFields大小合适,但我必须为所有JPanels单独执行此操作 是否有一个标准的LayoutManager,它将根据文本组件的字体大小计算文本组件的正确高度,并在文本组件之间和/或周围填充包含文本组件的空间 编辑: 根据要求

我有几个
JPanel
s,其中包含
JLabel
s和
JTextField
s,用于Swing应用程序中的用户输入

我正在手工编辑NetBeans GUI生成器生成的代码,但仍然希望保持类似的布局

我首先使用了
GridLayout
。我可以调整
hgap
使我的
JLabel
s和
JTextField
s大小合适,但我必须为所有
JPanel
s单独执行此操作

是否有一个标准的
LayoutManager
,它将根据文本组件的字体大小计算文本组件的正确高度,并在文本组件之间和/或周围填充包含文本组件的空间

编辑:

根据要求,这里有一个SSCCE来演示我正在尝试做什么

GridLayoutSCCE:

package gridlayoutsscce;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class GridLayoutSSCCE {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame("Grid Layout SSCCE");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.add(new GridLayoutSSCCEPanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }
}
网格布局概念:

package gridlayoutsscce;

import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

class GridLayoutSSCCEPanel extends JPanel {
    public GridLayoutSSCCEPanel() {
        this.setLayout(new GridLayout(2, 2));
        this.add(new JLabel("Label 1:"));
        this.add(new JTextField());

        this.add(new JLabel("Label 2:"));
        this.add(new JTextField());
    }
}
当我第一次运行程序时,这看起来很好。但是,当我调整窗口大小时,文本字段会向外延伸,因此每个字段都会填充窗口高度的一半。我希望它们保持原来的高度,当窗口调整大小时,

会做你想做的事情,虽然它是高度灵活的,但它也认为最复杂的一个。
我肯定
miglayet
会被提及,但我个人从未使用过,我也应该提及,但我也从未使用过它。

朋友不允许朋友使用GridBagLayout(我们在这里都是朋友,对吧?)

使用JGoodies forms layout,这将完成您希望SSCE执行的操作:

class MyFormLayoutSSCCEPanel extends JPanel {
  public MyFormLayoutSSCCEPanel() {
    FormLayout layout = new FormLayout(
      "pref, pref:grow",   // columns
      "pref, pref");       // rows
    this.setLayout(layout);

    CellConstraints cc = new CellConstraints();
    this.add(new JLabel("Label 1:"), cc.xy(1,1));
    this.add(new JTextField(), cc.xy(2, 1));

    this.add(new JLabel("Label 2:"), cc.xy(1, 2));
    this.add(new JTextField(), cc.xy(2, 2));
  }
}
(请注意,这并没有完全复制原始SSCCE的行为——我已经告诉它水平增长文本字段以占用所有可用空间。)


不过,我不建议换用JGoodies——在你能够正确地理解JGoodies formlayout将为你节省的精力之前,你至少需要花上几周的时间,对默认的Swing布局管理器感到沮丧 GridLayout < /代码>并调用<代码>包()/代码> + 1和附加解释。基于更新的问题,我还将考虑<代码> BoxLayout < /代码>;我以前用过GridBagLayout。我忘了GridBagConstraints.fill。要使用它需要一些工作。@Code Guru没人说这很容易;)看起来GridBagLayout很合适。但是,我必须添加很多代码来完成我想要的事情-(@Code Guru您可能可以构建一系列帮助程序以使其更简单,例如add(Component,Container,x,y)。在内部,它将为您设置所需的约束。您甚至可以使用通用值(例如Insests)为其种子,感谢示例代码。”(请注意,这并没有完全复制原始SSCCE的行为——我已经告诉它水平增长文本字段以占用所有可用空间。)这可能是一个很好的特性,事实上,在我从事这个项目的时候,我一直在想这个特性。我和默认的Swing布局管理器一起工作过很多次。这只是一段很长很长的时间。我肯定会研究JGoodies,尽管可能不适用于当前的项目。