如何为 JTextField 设置动态宽度?

Posted

技术标签:

【中文标题】如何为 JTextField 设置动态宽度?【英文标题】:How to have a dynamic width for a JTextField? 【发布时间】:2011-09-18 05:43:19 【问题描述】:

我有一个JFrame 和一个JTextField。我想在JFrame 最大化/恢复时相应地增加/减少JTextField 的宽度。

我该怎么做?

【问题讨论】:

【参考方案1】:

为 JFrame 设置一个组件侦听器。它提供了一些在组件调整大小、移动、隐藏或显示时运行的方法。 Here 是怎么做的。

【讨论】:

真的不应该需要使用监听器来让你的组件在调整父级大小时调整大小。如果你发现自己在使用它,你应该咬紧牙关学习如何正确使用 LayoutManager。实际上,您链接到的教程中的示例代码有一个占用所有可用空间的文本框,您会注意到它没有使用组件侦听器来执行此操作。 是的,没错。 LayoutManager 在大多数情况下很有用,但在其中一个学校项目中,当调整窗口大小时,我必须更改的不是组件的大小,而是布局本身。虽然我不是 Swing 大师,而且我的项目也不是完全学习 Swing 的大型项目,但我的解决方案是使用这种侦听器。 (目前,@user805563 还没有回复,我们不知道他/她是否需要更改布局,或者不知道如何有效地使用布局。:)【参考方案2】:

您需要为父组件使用 LayoutManager 来指示 JTextField 填充可用空间。

但是,JFrame 的默认布局管理器会执行此操作。如果您只是调用frame.add(new JTextField()) 并尝试调整窗口大小,文本字段填满可用空间。您必须将 JTextField 放入具有不同布局管理器的中间面板中。您需要提供更多背景信息,以便我们帮助您解决具体问题。

【讨论】:

+1,另一种选择是注册 ComponentListener 并覆盖 componentResized(...) 方法以执行一些自定义操作。 @user805563:您要阅读的教程从这里开始:Laying out Components in a Container

以上是关于如何为 JTextField 设置动态宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何为不是直接父级而是父级父级的嵌套元素设置百分比宽度?

如何为gridview项目(文本块)提供动态宽度?

如何为其模型中文本的不同代码点自定义Java 9+ JTextField的视图?

在 SwiftUI 中,如何为条形图创建动态矩形?

如何为跨度设置固定宽度

以方式设置 JTextField 宽度以包装给定的文本