当前位置:编程学习 > JAVA >>

Swing菜单与工具栏(六)

6.3 使用工具栏:JToolBar类
工具栏是现代用户界面中主程序窗口的主要部分。工具栏向用户提供了对于常用命令的简单访问,这通常构建为层次结构的菜单结构。支持这种功能的Swing组件就是JToolBar。

JToolBar是一个种存放组件的特殊Swing容器。这个容器可以在我们的Java Applet或是程序中用作工具栏,而且可以在程序的主窗口之外浮动或是托拽。JToolBar是一个非常容易使用与理解的简单组件。

6.3.1 创建JToolBar组件
有四个构造函数可以用来创建JToolBar组件:

public JToolBar()
JToolBar jToolBar = new JToolBar();
public JToolBar(int orientation)
JToolBar jToolBar = new JToolBar(JToolBar.VERTICAL);
public JToolBar(String name)
JToolBar jToolBar = new JToolBar("Window Title");
public JToolBar(String name,int orientation)
JToolBar jToolBar = new JToolBar("Window Title", ToolBar.VERTICAL);在默认情况下,工具栏是以水平方向进行创建的。然而,我们可以通过JToolBar的常量HORIZONTAL与VERTICAL显示指定方向。

而且在默认情况下,工具栏是可以浮动的。所以,如果我们使用水平方向创建一个工具栏,用户可以在窗口周围拖动工具栏来改变工具栏的方向。

6.3.2 向JToolBar添加组件
一旦我们拥有一个JToolBar,我们需要向其中添加组件。任意的Component都可以添加到工具栏。当处理水平工具栏时,由于美观的原因,如果工具栏的组件是大致相同的高度时是最好的。对于垂直工具栏,如果工具栏组件具有大致相同的宽度则是最好的。JToolBar类只定义了一个方法用于添加工具栏项目;其他的方法,例如add(Component)是由Container继承而来的。另外,我们可以向工具栏添加分隔符。

public JButton add(Action action);
public void addSeparator();
public void addSeparator(Dimension size);当使用JToolBar的add(Action)方法时,所添加的Action被封闭在一个JButton对象中。这与向JMenu或是JPopupMenu组件添加Action不同,在后一种情况中,所添加的是JMenuItem对象。对于JMenu与JPopupMenu,以这种方式添加Action是类的Javadoc中所不推荐的。对于分隔符,如果我们没有指定尺寸,所安装的观感会强制默认的尺寸设置。

由工具栏移除组件可以使用下面的方法:

public void remove(Component component)6.3.3 JToolBar属性
表6-15列出了JToolBar所定义的9个属性。

JToolBar属性

属性名
 数据类型
 访问性
 
accessibleContext
 AccessibleContext
 只读
 
borderPainted
 boolean
 读写绑定
 
floatable
 boolean
 读写绑定
 
layout
 LayoutManager
 只写
 
margin
 Insets
 读写绑定
 
orientation
 int
 读写绑定
 
rollover
 boolean
 读写绑定
 
UI
 ToolBarUI
 读写
 
UIClassID
 String
 只读
 

在默认情况下绘制JToolBar的边框。如果我们不希望绘制边框,我们可以将borderPainted属性设置为false。如果不使用borderPainted属性,我们需要修改border属性(由超类JComponent继承的属性)。

orientation属性只可以设置为JToolBar的HORIZONTAL或是VERTICAL常量。如果使用其他的值,则会抛出IllegalArgumentException。修改方向会改变工具栏的布局管理器。如果我们通过setLayout()方法直接修改布局管理器,改变方向会撤销我们的布局管理器。

正如前面所提到的,默认情况下工具栏是可浮动的。这就意味着用户可以拖动工具栏并放置在其他位置。要拖动工具栏,用户选择工具栏的空白部分。然后工具栏可以停留在原始的程序窗口,在主窗口内部浮动,或者是拖动到原始程序窗口的其他部分。如果原始窗口的布局管理器是BorderLayout,可拖动的部分是布局管理器无组件的边。(我们不能将工具栏放在窗口的中央。)否则,工具栏会被拖动到容器的最后一个点上。图6-10显示了拖动与停放过程的不同阶段。

rollover属性定义了当用户在工具栏的不同组件上移动时与观感特定的行为。这种行为涉及到颜色与边框的不同。

6.3.4 处理JToolBar事件
并没有特定于JToolBar的事件。我们需要将监听器关联到我们需要响应用户交互的JToolBar上的每一项上。当然,JToolBar是一个Container,所以我们也可以监听其事件。

6.3.5 自定义JToolBar观感
每一个可安装的Swing观感都提供了其自己的JToolBar外观以及默认的UIResource值集合。外观的大部分是由工具栏中的实际组件控制的。图6-11显示了预安装的观感类型集合Motif,Windows以及Ocean的JToolBar组件外观。每一个工具栏都有五个JButton组件,在第四个与第五个组件之间有一个分隔符。

 swing_6_11

表6-16中列出了JToolBar的UIResource相关的属性。对于JToolBar组件,有22个不同的属性。

JToolBar UIResource元素

 
属性字符串
 对象类型
 
ToolBar.actionMap
 ActionMap
 
ToolBar.ancestorInputMap
 InputMap
 
ToolBar.background
 Color
 
ToolBar.border
 Border
 
ToolBar.borderColor
 Color
 
ToolBar.darkShadow
 Color
 
ToolBar.dockingBackground
 Color
 
ToolBar.docingForeground
 Color
 
ToolBar.floatingBackground
 Color
 
ToolBar.floatingForeground
 Color
 
ToolBar.font
 Font
 
ToolBar.foreground
 Color
 
ToolBar.handleIcon
 Icon
 
ToolBar.highlight
 Color
 
ToolBar.isRollover
 Boolean
 
ToolBar.light
 Color
 
ToolBar.nonrolloverBorder
 Border
 
ToolBar.rolloverBorder
 Border
 
ToolBar.separatorSize
 Dimension
 
ToolBar.shadow
 Color
 
ToolBarSeparatorUI
 String
 
ToolBarUI
 String
 

6.3.6 完整的JToolBar使用示例
列表6-8演示了一个完整的JToolBar示例,这个程序生成了一个带有多个菱形按钮的工具栏。这个程序同时重用了本章前面列表6-2中为菜单示例所定义的ShowAction。

在这个示例中允许了rollover属性以演示当前观感的不同。图6-12是我们在不同的按钮上移动鼠标时的输出结果。

package net.ariel.ch06;   import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;   import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;   import net.ariel.ch04.DiamondIcon;   public class ToolBarSample {   private static final int COLOR_POSITION = 0;
 private static final int STRING_POSITION = 1;
 static Object buttonColors[][] = {
  {Color.RED, "RED"},
  {Color.BLUE, "BLUE"},
  {Color.GREEN, "GREEN"},
  {Color.BLACK, "BLACK"},
  null, // separator
  {Color.CYAN, "CYAN"}
 };   public static class TheActionListener implements ActionListener {
  public void actionPerformed(ActionEvent event) {
   System.out.println(event.getActionCommand());
  }
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub   Runnable runner = new Runnable() {
   public void run() {
    JFrame frame = new JFrame("JToolBar Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ActionListener actionListener = new TheActionListener();   JToolBar toolbar = new JToolBar();
    toolbar.setRollover(true);   for(Object[] color: buttonColors) {
     if(color == null) {
      toolbar.addSeparator();
     }
  &nbs

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,