Java Swing 中是不是有等效的“组框”?
Posted
技术标签:
【中文标题】Java Swing 中是不是有等效的“组框”?【英文标题】:Is there a "Group Box" equivalent in Java Swing?Java Swing 中是否有等效的“组框”? 【发布时间】:2010-09-30 16:57:23 【问题描述】:尝试在 Java/Swing 中构建 GUI 应用程序。我主要习惯于使用 VB 之类的工具在 Windows 端“绘制”GUI(或者更准确地说,Gupta SQLWindows ......想知道有多少人知道那是什么 ;-))。
我在 Swing 中找不到与 Group Box 等效的东西...
使用组框,您可以在几个相关的小部件周围有一个方形框(通常带有标题)。一个例子是围绕几个单选按钮的组框(标题解释了单选按钮的含义,例如,标题为“Sex”的组框带有“Male”和“Female”单选按钮)。
我搜索了一下...我发现的唯一方法是添加一个子窗格,在子窗格上设置边框,然后将“组”中的所有小部件添加到子窗格.有没有更优雅的方法来做到这一点?
【问题讨论】:
也许你可以解释一下什么是组框。 我认为他的意思是您在许多对话框中看到的控制组,例如,在一堆小部件(例如单选按钮)周围有一个正方形。 【参考方案1】:创建一个 JPanel,并将您的单选按钮添加到其中。不要忘记将 JPanel 的布局设置为适当的。
然后拨打panel.setBorder(BorderFactory.createTitledBorder(name));
【讨论】:
【参考方案2】:其他人已经评论了 JPanel 并使用了 TitledBorder,这很好。
但是,在使用 Swing LayoutManagers 时,您可能会发现不同 JPanel 中的组件无法正确对齐(每个面板都有自己的 LayoutManager)很烦人。
因此,在 Swing GUI 中不使用 TitledBorders 而是使用 JLabel 后跟水平 JSeparator 将 JPanel 中的组件组分开是一种很好的做法(请查看网络上的“JGoodies”了解更多详细信息)。
参考。 "First Aid for Swing"
【讨论】:
是否有支持此声明的 Oracle 或系统特定指南?那个标签+分隔符应该比分组装箱更受欢迎? JGoodies 只是 一个 实施 Java 的公司。 @Kissaki 我提到这是一个很好的做法,而不是任何人的官方指南。事实是,使用 Swing 布局管理器系统,您不能跨 2 个面板对齐组件。因此,使用边框意味着失去两个组件的对齐方式。【参考方案3】:组框只是一组“按逻辑分组的小部件”。
这在摇摆世界中是JPanel
。
将您的小部件添加到JPanel
。
将其边框类型设置为“Titled Border”并给出与VB6“框架”的名称相同的标题。
瞧。你有你的分组框。
【讨论】:
【参考方案4】:这是 JRadioButton javadocs 的引述,因为您提出了单选按钮。
单选按钮的实现——可以选择或取消选择的项目,并向用户显示其状态。与 ButtonGroup 对象一起使用以创建一组按钮,其中一次只能选择一个按钮。 (创建一个 ButtonGroup 对象并使用它的 add 方法将 JRadioButton 对象包含在组中。)
注意:ButtonGroup 对象是一个逻辑分组——不是物理分组。要创建一个按钮面板,您仍然应该创建一个 JPanel 或类似的容器对象,并为其添加一个边框以将其与周围的组件隔离开来。
【讨论】:
谢谢,但正如您正确指出的那样,我的主要意图是“视觉”方面。【参考方案5】:不是 AFAIK,至少不是标准的摇摆小部件。
在 VB 中,您有一个组小部件,它本质上是一个面板 + 边框。
在 Swing 中,您有一个 JPanel,它是容器小部件,并且只有在需要时才在其上创建和设置边框对象。人们可以以一种更优雅的方式争辩说,因为您不需要为不使用的东西(例如边框)付费
【讨论】:
【参考方案6】:正如David Koelle提到的通过java代码设置边框,你也可以在设计器模式下达到类似的效果。
【讨论】:
【参考方案7】:我根据 Uri 的评论做出回应,该评论解释了Group Box
的 OP 含义:
Uri:我认为他是指您在许多对话框中看到的控制组,例如,在一堆小部件(例如单选按钮)周围有一个正方形。
据我所知,每个JComponent
都可以为自己设置边框,因此您不需要第二个面板。
【讨论】:
我希望在多个 JComponents 周围有一个边框......而且,在组框中只有一个元素通常是不好的做法。 您可以在 JPanel 中添加多个组件。 我知道..我可能误解了你的回答。 呃?什么评论?这仍然是原始问题的答案吗?我没看到。以上是关于Java Swing 中是不是有等效的“组框”?的主要内容,如果未能解决你的问题,请参考以下文章
“glob”类型模式是不是有等效的 java.util.regex ?
Java 中协议缓冲区分隔的 I/O 函数是不是有 C++ 等效项?
Google Cloud Storage - Java API 中是不是有等效的 gsutil 'rsync'?