如何使用分隔符
JSeparator类提供水平或垂直分隔线或空白区域。它最常用于菜单和工具栏。实际上,由于menus和tool bars提供了方便的方法来创建和添加为其容器定制的分隔符,因此您甚至可以在不知道JSeparator
类存在的情况下使用分隔符。分隔符与borders有点相似,不同之处在于分隔符是 true 的组件,因此它们被绘制在容器内,而不是围绕特定组件的边缘。
这是具有三个分隔符的菜单图片,用于将菜单分为四组:
将菜单项和分隔符添加到菜单的代码非常简单,具体如下:
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);
向工具栏添加分隔符的过程与此类似。您可以找到menus和tool bars的“操作方法”部分中说明的完整代码。如果要对菜单和工具栏中的分隔符进行更多控制,则可以直接使用实现它们的JSeparator
子类:JPopupMenu.Separator和JToolBar.Separator。特别是JToolBar.Separator
具有用于指定分隔符大小的 API。
Using JSeparator
您可以直接使用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));
如代码所示,按钮,分隔符和文本字段都共享一个容器-一个使用从左到右的box layout的JPanel
实例。多亏了布局 管理 器(以及分隔符具有不受限制的最大尺寸的事实),分隔符会自动制作成与其可用显示区域一样高。
在前面的代码中,水平支柱是不可见的组件,用于在分隔符周围提供空间。一个 5 像素的空白边框在面板周围提供了缓冲,还可以防止分隔符一直延伸到其上方的组件以及其下方的窗口边缘。
这是另一个使用分隔符的 GUI 的图片,这次是在一组控件和显示区域之间放置一条分隔线。
您可以在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.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() | 创建用于菜单的分隔符。 |
使用分隔符的示例
本课的几个示例通常在菜单中使用分隔符。这是一些更有趣的示例的列表。
Example | Where Described | Notes |
---|---|---|
ListDemo | 本部分和如何使用清单 | 在由水平框布局控制的面板中使用垂直分隔符。 |
TextInputDemo | 本部分和如何使用格式化的文本字段 | 在由边框布局控制的面板左侧使用垂直分隔符。 |
MenuDemo | 本部分和如何使用菜单 | 使用JMenu 方法addSeparator 将分隔符放在菜单中。 |
ToolBarDemo2 | 如何使用工具栏 | 使用JToolBar 方法addSeparator 在两种按钮之间放置空格。 |
如果您使用 JavaFX 编程,请参见使用 JavaFX UI 控件。