12.2.5 使用JToolBar创建工具条
12.2.5 使用JToolBar创建工具条
构造器
Swing
提供了JToolBar
类来创建工具条:
方法 | 描述 |
---|---|
JToolBar() |
Creates a new tool bar; orientation defaults to HORIZONTAL. |
JToolBar(int orientation) |
Creates a new tool bar with the specified orientation. |
JToolBar(String name) |
Creates a new tool bar with the specified name. |
JToolBar(String name, int orientation) |
Creates a new tool bar with a specified name and orientation. |
创建JToolBar
对象时可以指定如下两个参数:
name
:该参数指定该工具条的名称orientation
:该参数指定该工具条的方向。
JToolBar
常用方法
一旦创建了JToolBar
对象之后,JToolBar
对象还有如下几个常用方法:
方法 | 描述 |
---|---|
JButton add(Action a) |
通过Action 对象为JToolBar 添加对应的工具按钮。 |
void addSeparator() |
添加一个默认大小的分隔符 |
void addSeparator(Dimension size) |
向工具条中添加指定大小的分隔符 |
void setFloatable(boolean b) |
设置该工具条是否可浮动,即该工具条是否可以拖动 |
void setMargin(Insets m) |
设置工具条边框和工具按钮之间的页边距 |
void setOrientation(int o) |
设置工具条的方向 |
void setRollover(boolean rollover) |
设置此工具条的rollover 状态 |
Action
接口
上面的大多数方法都比较容易理解,比较难以理解的是add
方法,系统如何为工具条添加Action
对应的按钮呢?
Action
接口是ActionListener
接口的子接口,它除包含ActionListener
接口的actionPerformed()
方法之外,还包含name
和icon
两个属性,其中name
用于指定按钮或菜单项中的文本,而icon
则用于指定按钮的图标或菜单项中的图标。也就是说,Action不仅可作为事件监听器使用,而且可被转换成按钮或菜单项。
值得指出的是,Action
本身并不是按钮,也不是菜单项,只是当把Action
对象添加到某些容器(也可直接使用Action
来创建按钮),如菜单和工具栏中时,这些容器会为该Action
对象创建对应的组件(菜单项和按钮)。也就是说,这些容器需要负责完成如下事情。
- 创建一个适用于该容器的组件(例如,在工具栏中创建一个工具按钮)
- 从
Action
对象中获得对应的属性来设置该组件(例如,通过name
来设置文本,通过icon
来设置图标)。 - 检查
Action
对象的初始状态,确定它是否处于激活状态,并根据该Action
的状态米决定其对应所有组件的行为。只有处于激活状态的Action
所对应的Swing
组件才可以响应用户动作。 - 通过
Action
对象为对应组件注册事件监听器,系统将为该Action
所创建的所有组件注册同一个事件监听器(事件处理器就是Action
对象里的actionPerformed
方法)
程序
例如,程序中有一个菜单项、一个工具按钮,还有一个普通按钮都需要完成某个“复制”动作,程序就可以将该“复制”动作定义成Action
,并为之指定name
和icon
属性,然后通过该Action
来创建菜单项、工具按钮和普通按钮,就可以让这三个组件具有相同的功能。另一个“粘贴”按钮也大致相似,而且“粘贴”组件默认不可用,只有当“复制”组件被触发后,且剪贴板中有内容时才可用。
1 | import java.awt.*; |
上面程序中创建了pasteAction
、copyAction
两个Action
,然后根据这两个Action
分别创建了按钮、工具按钮、菜单项组件,开始时pasteAction
处于非激活状态,则该Action
对应的按钮、工具按钮、菜单项都处于不可用状态。运行上面程序,会看到如图12.7所示的界面
图12.7显示了工具条被拖动后的效果,这是因为工具条默认处于浮动状态。除此之外,程序中 2 号代码设置了工具条和工具按钮之间的页边距,所以可以看到工具条在工具按钮周围保留了一些空白区域。