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,尽管可能不适用于当前的项目。