如何使用分隔符

JSeparator类提供水平或垂直分隔线或空白区域。它最常用于菜单和工具栏。实际上,由于menustool bars提供了方便的方法来创建和添加为其容器定制的分隔符,因此您甚至可以在不知道JSeparator类存在的情况下使用分隔符。分隔符与borders有点相似,不同之处在于分隔符是 true 的组件,因此它们被绘制在容器内,而不是围绕特定组件的边缘。

这是具有三个分隔符的菜单图片,用于将菜单分为四组:

菜单由 4 个部分组成,如 3 个分隔符所示

将菜单项和分隔符添加到菜单的代码非常简单,具体如下:

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);

向工具栏添加分隔符的过程与此类似。您可以找到menustool bars的“操作方法”部分中说明的完整代码。如果要对菜单和工具栏中的分隔符进行更多控制,则可以直接使用实现它们的JSeparator子类:JPopupMenu.SeparatorJToolBar.Separator。特别是JToolBar.Separator具有用于指定分隔符大小的 API。

Using 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));

如代码所示,按钮,分隔符和文本字段都共享一个容器-一个使用从左到右的box layoutJPanel实例。多亏了布局 管理 器(以及分隔符具有不受限制的最大尺寸的事实),分隔符会自动制作成与其可用显示区域一样高。

在前面的代码中,水平支柱是不可见的组件,用于在分隔符周围提供空间。一个 5 像素的空白边框在面板周围提供了缓冲,还可以防止分隔符一直延伸到其上方的组件以及其下方的窗口边缘。

这是另一个使用分隔符的 GUI 的图片,这次是在一组控件和显示区域之间放置一条分隔线。

TextInputDemo 的快照

您可以在example index中找到代码。这是设置分隔符容器的代码:

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控制的容器的最左侧区域中,可使分隔符与位于容器中心的地址显示组件一样高。有关边框布局如何工作的详细信息,请参见如何使用 BorderLayout

分隔符 API

使用分隔符的 API 最少,因为分隔符没有内容并且不会响应用户 Importing。

创建和初始化分隔符

构造函数或方法Purpose
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()创建用于菜单的分隔符。

使用分隔符的示例

本课的几个示例通常在菜单中使用分隔符。这是一些更有趣的示例的列表。

ExampleWhere DescribedNotes
ListDemo本部分和如何使用清单在由水平框布局控制的面板中使用垂直分隔符。
TextInputDemo本部分和如何使用格式化的文本字段在由边框布局控制的面板左侧使用垂直分隔符。
MenuDemo本部分和如何使用菜单使用JMenu方法addSeparator将分隔符放在菜单中。
ToolBarDemo2如何使用工具栏使用JToolBar方法addSeparator在两种按钮之间放置空格。

如果您使用 JavaFX 编程,请参见使用 JavaFX UI 控件