Swing提供了JTooBar类来创建工具条,并且可以往JTooBar中添加多个工具按钮
JToolBar API:
方法名称 | 方法功能 |
JToolBar(String name,int orientation) | 创建一个名为name,方向为orientation的工具条对象,其orientation的是取值可以是SwingConstants,HORIZONTAL或SwingConatants.VERTICAL |
JButton add(Action a) | 通过Action对象为ToolBar工具条添加对应的工具按钮 |
addSeparator(Dimension size) | 向工具条中添加指定大小的分隔符 |
setFloatable(boolean b) | 设置工具条是否可以被拖动 |
setMargin(Insets m) | 设置工具条与工具按钮的边距 |
setOrientation(int o) | 设置工具条的方向 |
add(Action a)方法:
上述API中add(Action a)这个方法比较难理解。Action接口是ActionListener的一个子接口,那么它就代表一个事件监听器,而这里add方法是在给工具条添加一个工具按钮,为什么传递的是一个事件监听器呢?
首先要明确的是不管是菜单条中的菜单项还是工具条中的工具按钮,最终肯定是需要点击来完成一些操作,所以JToolBar以及JMenu都提供了更加便捷的添加子组件的方法add(Action a),在这个方法的内部会做如下几件事情:
1.创建一个适用于该容器的组件(例如,在工具类中创建一个工具按钮);
2.从Action对象中获取对应的属性来设置该组件(通过Icon来设置按钮图标);
3.把Action监听器注册到刚才创建的组件上
代码演示:
package com.aynu.layout;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
public class JToolBarTest {
JFrame jf =new JFrame("测试工具条");
JTextArea jta = new JTextArea(6,35);
//声明工具条相关内容
JToolBar jToolBar = new JToolBar("播放工具条",SwingUtilities.HORIZONTAL);
//创建三个Action对象
//传递的参数,name和icon,最终在添加到工具条中时,会被拿出来作为按钮的名称和图标
Action pre = new AbstractAction("上一曲") {
@Override
public void actionPerformed(ActionEvent e) {
jta.append("上一曲.\n");
}
};
Action pause = new AbstractAction("暂停") {
@Override
public void actionPerformed(ActionEvent e) {
jta.append("暂停.\n");
}
};
Action next = new AbstractAction("下一曲") {
@Override
public void actionPerformed(ActionEvent e) {
jta.append("下一曲.\n");
}
};
public void init(){
//组装视图
//通过Action对象来创建JButton
JButton preBtn =new JButton(pre);
jToolBar.add(pre);
jToolBar.addSeparator();
jToolBar.add(pause);
jToolBar.addSeparator();
jToolBar.add(next);
//让工具条可以拖到
jToolBar.setFloatable(true);
jf.add(jToolBar, BorderLayout.NORTH);
//文本框默认不支持滚动条
//把一个组件设置到JScrollPane,那么该组件就支持滚动条了
JScrollPane jScrollPane =new JScrollPane(jta);
jf.add(jScrollPane);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
jf.setVisible(true);
}
public static void main(String[] args) {
new JToolBarTest().init();
}
}