文档

Java™教程
隐藏目录
如何使用分隔符
教程:使用Swing创建GUI
课程:使用Swing组件
部分:如何使用各种组件

如何使用分隔符

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.SeparatorJToolBar.Separator。特别是,JToolBar.Separator具有用于指定分隔符大小的API。

使用JSeparator

您可以直接使用JSeparator类在任何容器中提供分割线。以下图片显示了一个GUI,其右侧有一个带有Fire标签的按钮的分隔符。

ListDemo的快照

分隔符几乎没有API,并且非常容易使用,只要记住一件事:在大多数实现中,垂直分隔符的首选高度为0,水平分隔符的首选宽度为0。这意味着除非设置了首选大小或将其放在诸如BorderLayoutBoxLayout等可以将其拉伸以填充其可用显示区域的布局管理器的控制下,否则分隔符是不可见的

垂直分隔符具有一定的宽度(水平分隔符具有一定的高度),因此您应该看到分隔符的位置有一些空间。但是,只有在宽度和高度都不为零时才会绘制实际的分隔线。

以下代码片段显示了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的图片,这次是在控件组和显示区域之间放置一个分隔线。

TextInputDemo的快照

您可以在示例索引中找到代码。下面是设置分隔符容器的代码:

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

使用分隔符的API非常简单,因为它们没有内容,也不响应用户输入。

创建和初始化分隔符
构造函数或方法 用途
void addSeparator()
void addSeparator(Dimension)
(在JToolBar中)
将工具栏分隔符(在大多数外观下几乎不可见)附加到工具栏的当前末尾。可选参数指定分隔符的大小。该方法的无参数版本使用具有默认大小的分隔符,该大小由当前外观确定。
void addSeparator()
void insertSeparator(int)
(在JMenu中)
在菜单中放置分隔符。 addSeparator方法将分隔符放在菜单的当前末尾。 insertSeparator方法将分隔符插入到菜单中的指定位置。
void addSeparator()
(在JPopupMenu中)
在弹出菜单的当前末尾放置分隔符。
JSeparator()
JSeparator(int)
创建分隔符。如果未指定参数,则分隔符为水平分隔符。参数可以是SwingConstants.HORIZONTALSwingConstants.VERTICAL
void setOrientation(int)
int getOrientation()
(在JSeparator中)
获取或设置分隔符的方向,可以是SwingConstants.HORIZONTALSwingConstants.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


上一页:如何使用滚动窗格
下一页:如何使用滑块