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 ?

如何在 Swing 应用程序中使用退出按钮?

Java 中协议缓冲区分隔的 I/O 函数是不是有 C++ 等效项?

Google Cloud Storage - Java API 中是不是有等效的 gsutil 'rsync'?

java swing开发的CS结构的应用程序怎样在浏览器IE或火狐中运行

AWS SDK Java 版本 2 - 是不是有与版本 1 中的 doesObjectExist() 等效的版本?