【问题标题】:JTextField becomes HUGE in a HorizontalBoxJTextField 在 Horizo​​ntalBox 中变得巨大
【发布时间】:2014-05-20 13:05:05
【问题描述】:

请考虑这个 Java 代码片段:

Box buttonBox = Box.createHorizontalBox();
buttonBox.add(new JCheckBox("Select all"));
buttonBox.add(Box.createHorizontalGlue());
buttonBox.add(new JLabel("Filter: "));
buttonBox.add(new JTextField());

Box paneBox = Box.createVerticalBox();
paneBox.add(buttonBox);
paneBox.add(new JScrollPane(jList));

出于某种我不明白的原因,JTextField 占据了大部分屏幕。 jList 甚至不再可见。我想知道为什么以及如何解决它。

  1. 当我用 JTextField 注释该行时,它看起来很好(当然,没有 JTextField 除外)。为什么 JCheckBox 和 JLabel 没有变得大得离谱?单行的JTextField能占据几乎整个屏幕的目的是什么?

  2. 大多数人建议根据我的需要设置 JTextField 字段的大小。但是,我读到我不应该调用这些方法,而是让 LayoutManager 来处理它。现在防止 JTextField 变得如此大的最优雅的解决方案是什么?

【问题讨论】:

标签: java jtextfield layout-manager


【解决方案1】:

尝试像这样使用setPreferredSize 方法:

textFieldName.setPreferredSize(new Dimension(x, y));

显然输入您希望 JTextField 大小为 x 和 y 的值

【讨论】:

  • 不幸的是,setColumns 没有效果。但是,我更关心 JTextField 的高度,它远超过一行文本所需的高度。如果我理解正确,setColumns 只会影响宽度。
  • 好的,很抱歉,我会编辑我的答案,可能对你有用
  • This thread 说我永远不应该使用这个功能。我想知道格式化 JTextField 的正确方法。
  • 我以前没有遇到过,从我读到的内容来看,虽然我猜想使用 LayoutManager 是要走的路。我没有这样做的经验,所以也许其他人可以详细说明这个主题。
【解决方案2】:

您可以通过使用简单的 JPanel() 而不是 Box 来避免这个问题。只需将首选大小设置为您的 JTextField。

//Box buttonBox = Box.createHorizontalBox();
JPanel buttonBox = new JPanel(); 

buttonBox.add(new JCheckBox("Select all"));
buttonBox.add(Box.createHorizontalGlue());
buttonBox.add(new JLabel("Filter: "));
JTextField jt = new JTextField();
jt.setPreferredSize(new Dimension(100,25));
buttonBox.add(jt);

编辑

顺便说一句,JPanel 的默认布局是 FlowLayout,它从左到右放置组件,默认情况下居中对齐。您仍然可以更改对齐方式。 例如:

 JPanel buttonBox = new JPanel(new FlowLayout(FlowLayout.LEFT));

您还可以更改每个组件之间的间隙。还有其他一些布局,例如 BorderLayout 或 GridLayout / GridBagLayout。我让您在 Google 上搜索有关它们的更多信息。

黄色为 JPanel,红色为 VerticalBox

【讨论】:

  • 调用 setPreferredSize 是不必要的,因为 JTextField 在这种布局下不会变得很大。根据this thread,无论如何都应该避免使用这些方法。但是,JPanel 本身就太大了,占据了一半的屏幕,大部分是空的。因此,这也不适合我。
  • JPanel 不会太大,我不明白你的问题。我刚刚编辑了我的帖子给你看截图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多