Java教程已针对JDK 8编写。本页面中描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及更高版本中更新的语言特性摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息,请参阅JDK发行说明。
JSeparator
类提供了水平或垂直的分割线或空白空间。它最常用于菜单和工具栏中。实际上,您可以在不知道JSeparator
类存在的情况下使用分隔符,因为菜单和工具栏提供了自定义为其容器创建和添加分隔符的便捷方法。分隔符与边框有些相似,不同之处在于分隔符是真正的组件,因此绘制在容器内部,而不是绘制在特定组件的边缘周围。
这是一个具有三个分隔符的菜单的图片,用于将菜单分为四组项目:
将菜单项和分隔符添加到菜单的代码非常简单,可以简化为以下内容:
menu.add(menuItem1); menu.add(menuItem2); menu.add(menuItem3); menu.addSeparator(); menu.add(rbMenuItem1); menu.add(rbMenuItem2); menu.addSeparator(); menu.add(cbMenuItem1); menu.add(cbMenuItem2); menu.addSeparator(); menu.add(submenu);
类似地,将分隔符添加到工具栏也是类似的。您可以在菜单和工具栏的如何部分中找到完整的代码。如果您想要更多地控制菜单和工具栏中的分隔符,您可以直接使用实现它们的JSeparator
子类:JPopupMenu.Separator和JToolBar.Separator。特别是,JToolBar.Separator
具有用于指定分隔符大小的API。
您可以直接使用JSeparator
类在任何容器中提供分割线。以下图片显示了一个GUI,其右侧有一个带有Fire标签的按钮的分隔符。
分隔符几乎没有API,并且非常容易使用,只要记住一件事:在大多数实现中,垂直分隔符的首选高度为0,水平分隔符的首选宽度为0。这意味着除非设置了首选大小或将其放在诸如BorderLayout
或BoxLayout
等可以将其拉伸以填充其可用显示区域的布局管理器的控制下,否则分隔符是不可见的。
垂直分隔符具有一定的宽度(水平分隔符具有一定的高度),因此您应该看到分隔符的位置有一些空间。但是,只有在宽度和高度都不为零时才会绘制实际的分隔线。
以下代码片段显示了ListDemo如何组合包含垂直分隔符的面板。您可以在ListDemo.java
中找到ListDemo的完整源代码。
JPanel buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.add(fireButton); buttonPane.add(Box.createHorizontalStrut(5)); buttonPane.add(new JSeparator(SwingConstants.VERTICAL)); buttonPane.add(Box.createHorizontalStrut(5)); buttonPane.add(employeeName); buttonPane.add(hireButton); buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
正如代码所示,按钮、分隔符和文本字段共享一个容器,即使用从左到右的盒式布局的JPanel
实例。由于布局管理器(以及分隔符具有无限的最大大小),分隔符会自动变高,以适应其可用的显示区域。
在上述代码中,水平间隔是不可见的组件,用于在分隔符周围提供空间。5像素的空边框在面板周围提供了一个缓冲区,并防止分隔符延伸到其上方的组件和下方的窗口边缘。
下面是另一个使用分隔符的GUI的图片,这次是在控件组和显示区域之间放置一个分隔线。
您可以在示例索引中找到代码。下面是设置分隔符容器的代码:
JPanel panel = new JPanel(new BorderLayout()); ... panel.setBorder(BorderFactory.createEmptyBorder( GAP/2, //top 0, //left GAP/2, //bottom 0)); //right panel.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.LINE_START); panel.add(addressDisplay, BorderLayout.CENTER);
与上一个示例一样,面板使用空边框,以使分隔符不会延伸到其容器的边缘。将分隔符放在由BorderLayout
控制的容器的最左侧区域可以使分隔符与容器中央的地址显示组件一样高。有关边框布局的详细信息,请参见如何使用边框布局。
使用分隔符的API非常简单,因为它们没有内容,也不响应用户输入。
构造函数或方法 | 用途 |
---|---|
void addSeparator() void addSeparator(Dimension) (在 JToolBar 中) |
将工具栏分隔符(在大多数外观下几乎不可见)附加到工具栏的当前末尾。可选参数指定分隔符的大小。该方法的无参数版本使用具有默认大小的分隔符,该大小由当前外观确定。 |
void addSeparator() void insertSeparator(int) (在 JMenu 中) |
在菜单中放置分隔符。 addSeparator 方法将分隔符放在菜单的当前末尾。 insertSeparator 方法将分隔符插入到菜单中的指定位置。 |
void addSeparator() (在 JPopupMenu 中) |
在弹出菜单的当前末尾放置分隔符。 |
JSeparator() JSeparator(int) |
创建分隔符。如果未指定参数,则分隔符为水平分隔符。参数可以是SwingConstants.HORIZONTAL 或SwingConstants.VERTICAL 。 |
void setOrientation(int) int getOrientation() (在 JSeparator 中) |
获取或设置分隔符的方向,可以是SwingConstants.HORIZONTAL 或SwingConstants.VERTICAL 。 |
JToolBar.Separator() JToolBar.Separator(Dimension) |
为工具栏创建分隔符。可选参数指定分隔符的大小。 |
setSeparatorSize(Dimension) (在 JToolBar.Separator 中) |
指定分隔符的大小。具体地说,指定的Dimension 用作分隔符的最小、首选和最大大小。 |
JPopupMenu.Separator() | 为菜单创建分隔符。 |
本课程的几个示例使用分隔符,通常在菜单中。下面是一些较有趣的示例的列表。
示例 | 描述位置 | 备注 |
---|---|---|
ListDemo |
本节和如何使用列表 | 在由水平盒式布局控制的面板中使用垂直分隔符。 |
TextInputDemo |
本节和如何使用格式化文本字段 | 在由边框布局控制的面板的左侧放置垂直分隔符。 |
MenuDemo |
本节和如何使用菜单 | 使用JMenu 方法addSeparator 在菜单中放置分隔符。 |
ToolBarDemo2 |
如何使用工具栏 | 使用JToolBar 方法addSeparator 在两种按钮之间放置空间。 |
如果您正在使用JavaFX,请参见使用JavaFX UI Controls。