如何防止 Java Swing BoxLayout 中的 JTextFields 扩展?
Posted
技术标签:
【中文标题】如何防止 Java Swing BoxLayout 中的 JTextFields 扩展?【英文标题】:How do I keep JTextFields in a Java Swing BoxLayout from expanding? 【发布时间】:2011-02-12 03:30:30 【问题描述】:我有一个JPanel
,看起来像这样:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
...
panel.add(jTextField1);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton1);
panel.add(Box.createVerticalStrut(30));
panel.add(jTextField2);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton2);
... //etc.
我的问题是JTextField
s 在垂直方向上变得很大。我希望它们只够高到一行,因为这是用户可以输入的全部内容。按钮很好(它们不会垂直扩展)。
有什么方法可以阻止JTextField
s 扩展?我对 Swing 很陌生,所以如果我做的一切都非常错误,请告诉我。
【问题讨论】:
【参考方案1】:textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
【讨论】:
这使我的文本字段在水平方向上很小(同时垂直排序问题)。我现在已经整理好了(实际上我重新创建了 cbrown's solution 却没有意识到他们已经发布了它) @RichardTingleThis made my textfield tiny horisontally
- 可能是因为您在创建文本字段时没有指定文本或列数。这就是“...”在参数中的用途 通常对于空文本字段,您将使用像 "new JTextField(10)"
这样的代码。现在您将拥有合理的宽度和高度。【参考方案2】:
如果您希望宽度不断变化,只需将其设置为 MAX INT。所以...
textField.setMaximumSize( 新维度(Integer.MAX_VALUE, textField.getPreferredSize().height));【讨论】:
【参考方案3】:就我而言,我需要将所有答案组合起来才能正常工作。如果我不使用胶水,它不会垂直居中;如果我不限制最大尺寸,它会垂直延伸;如果我同时限制宽度和高度,它就太小了,只有足够宽来包含初始化文本。
textField = new JTextField("Hello, world!");
textField.setMaximumSize(
new Dimension(Integer.MAX_VALUE,
textField.getPreferredSize().height));
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(textField);
box.add(Box.createVerticalGlue());
【讨论】:
【参考方案4】:设置最大高度。 或将它们放在滚动区域中
【讨论】:
谢谢,兰迪——这真的是最好的方法吗?似乎高度应该根据用户的字体大小而有所不同。还是 Swing 不尊重系统字体?此外,我似乎无法找到一种方法来设置最大高度而不设置宽度(我想保持自动)。我能找到的最接近的是setMaximumSize
,它以Dimension
(宽度和高度)作为其参数。似乎必须有更好的方法。
关于布局管理器的内容很多。 boxlayout vs gridlayout vs 我最喜欢的borderlayout。你应该玩弄这些文件在所有这些中的表现 - 你可能会找到一个你喜欢的。【参考方案5】:
JPanel panel = new JPanel();
Box box = Box.createVerticalBox();
JTextField tf = new JTextField(8);
box.add(tf);
panel.add(box);
frame.getContentPane().add(panel, BorderLayout.CENTER);
【讨论】:
以上是关于如何防止 Java Swing BoxLayout 中的 JTextFields 扩展?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swing 中的垂直 BoxLayout 中将按钮粘贴到屏幕的最左侧