【问题标题】:Not able to edit width of JTextField in JFrame with Border Layout无法使用边框布局编辑 JFrame 中 JTextField 的宽度
【发布时间】:2013-03-07 14:46:01
【问题描述】:

感谢所有在 JTextField 问题上帮助我的人。通过使用 BorderLayout.PAGE_START,我成功地将 JTextField 添加到了带有边框布局的框架中。 但现在我无法编辑 JTextField 的宽度。只有高度在变化。 请看下划线。[这改变了JTextField的高度,但宽度没有改变]。

边框布局是否将所有组件拉伸到最大宽度?

【问题讨论】:

  • 大小确实由LayoutManager 决定。下次推荐。发布实际代码 iso 代码图像。
  • 您是如何将布局添加到框架的容器中的?你甚至使用它吗?您应该将项目添加到其中而不是直接添加框架,如下所示:frame.getContentPane().add(jtf, BorderLayout.PAGE_START);。无论如何,请发布更多代码。
  • @Rob 我已经多次看到getContentPane () 的使用,就像在您的示例中一样。但是为什么有些人会这样做而不是直接将组件添加到框架中呢?有区别吗?有优势吗?有缺点吗?
  • @Rob 没关系...
  • @SoboLAN 显式添加到 contentPane 是一个旧习惯,在 jFrame.add 方法被委托给 contentpane 之前。有些人(不是我,但这是个人喜好)即使在今天也更喜欢这样做以保持一致性:只有少数(最常用的)方法是委托的,其他方法则不是。因此,如果您需要同时使用两者,代码可能看起来很混乱。

标签: java swing jtextfield border-layout preferredsize


【解决方案1】:

不要像这样使用setPreferredSize(),因为你不知道字体会有多大。改为喜欢this

编辑:我忘记了BorderLayout.PAGE_START,所以只需使用新JPanel()FlowLayout;它使用文本字段的内置首选大小。

JTextField textField = new JTextField(10);
JPanel panel = new JPanel();
panel.add(textField);
frame.add(panel, BorderLayout.PAGE_START);
...
frame.pack();
frame.setVisible(true);

【讨论】:

  • 关于您的链接答案:实际上,无论您使用什么值,对 min/pref/max 的 any 进行硬编码都是一个坏主意
  • 感谢您的所有回答和 cmets。我需要彻底检查框架、面板、内容窗格和布局。
  • @Sam:你可能会看看其中的一些examples
  • @Catalina Island:这些例子看起来很适合学习基础知识。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2020-01-30
  • 2017-09-10
  • 2018-02-25
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多