科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道实例讲解分析关于SWT的工具栏(组图)

实例讲解分析关于SWT的工具栏(组图)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  使用SWT来完成建立窗口的检查时,你必须考虑的因素是最终用户希望看到一个设计良好带窗口式的工具条。工具条是一组按钮,一般放在菜单底下和窗体工作区域的上方,你只要点击一下就可以使用,它可以实现程序大部分经常使用的功能。

作者:中国IT实验室 来源:中国IT实验室 2007年9月23日

关键字: Eclipse 编程 java

  • 评论
  • 分享微博
  • 分享邮件

  使用SWT来完成建立窗口的检查时,你必须考虑的因素是最终用户希望看到一个设计良好带窗口式的工具条。工具条是一组按钮,一般放在菜单底下和窗体工作区域的上方,你只要点击一下就可以使用,它可以实现程序大部分经常使用的功能。如果你的程序支持菜单(差不多所有的程序都支持),这个程序将会从工具条的使用中受益。
  
  工具栏按钮可以包含文本标签, 图象, 或者两个都有; 使用图像可以提供一个提示, 关于按钮的的提示是一种不错的风格。如果您检查您所选择的平台运行的其他程序, 您可能会发现对图象的使用, 而不是文本, 是一种规范。每当鼠标盘旋在工具栏按钮上时,工具栏按钮经常会用到弹出式帮助文本。
  
  创建工具栏
  
  创建工具栏跟创建菜单类似。我们简单创建一个可以作为个性化按钮容器的工具栏,其中具有代表性的是ToolItem类的实例。
  
  一旦你定义了出现在工具栏得图像,并且获取了那些你希望能出现在工具栏里的图象, 你就可以开始做你自己的工具栏了。
  
  我怎么做呢?
  
  首先,创建工具栏本身-就是创建ToolBar类的实例:
  
  final ToolBar bar = new ToolBar(s, SWT.HORIZONTAL);
  
  这一行代码创建工具栏实例和参考变量s, 把这种思想带进使用界面。
  
  下一步,设置工具栏的大小和位置:
  
  bar.setSize(300, 65);bar.setLocation(0,0);
  
  发生了什么?
  
  在第一行设置工具栏的宽度和高度。通常, 你应该指定与窗体的宽度相等的宽度和在工具栏有足够空间可以容纳按钮的高度。当然,这个将取决于你计划使用那些按钮图象的大小, 因此一旦开始计划在编制程序之前,这些都是必需的。
  
  第二行设置X和Y坐标(工具栏的左上角相对于窗体工作区)。通常, 如果你要工具栏直接位于菜单之下, 可以设置工具栏的位置为(0, 0)。如果你想使用一个垂直的工具栏,可以设置参数值,让工具栏自身顺着向窗体的左边或右边。右边位置可以由窗体宽度减去工具栏的宽度得到。
  
  提示
  
  注意设置高度(第二个参数)。虽然将工具栏按钮的高度设置的过高并不影响工具栏的外观,但是这将减少其它控件在窗口中的工作区域。
  
  关于。。。
  
  为你的工具栏设置其他样式。在ToolBar类有以下五个样式:
  
  SWT.FLAT:创建一个non-3D的工具栏
  
  SWT.HORIZONTAL:使工具栏位于在窗口的上方, 菜单的下方。
  
  SWT.WRAP:可以使工具栏的项目文本横跨多条线。
  
  SWT.RIGHT:可以使在工具栏上的文本被正确的排整齐。(任何图象以正确的形式出现)
  
  SWT.VERTICAL:安置工具栏垂直沿着窗口的两边, 取决于参数传递给setLocation() 方法。
  
  一些样式,比如, the RIGHT和WRAP样式,能结合达到我们期望的一些作用。
  
  创建工具栏按钮
  
  下一步在创建工具栏就是增加按钮。你需要每个功能都有一个按钮,而这些按钮你希望用户从工具栏点击使用。你需要为每个按钮写一个方法,按钮分配了图象或标签,或者两个都有,这个是为了帮助用户准确的理解这个按钮所触发的功能。
  
  不管怎样, 由创建ToolItem 类的实例来创建工具栏按钮――一个实例一个按钮。
  
  提示
  
  这里有一些标准规定了哪些图象是用来表示特殊功能(函数)。剪刀图象被用来表示剪切功能, 例如, 当磁盘图象被用来表示保存功能。决定使用哪些图象的很重要方式可以用来研究在你目标平台上运行的程序。
  
  我怎么做呢?
  
  ToolItem 类构造器被认为作为容纳工具栏的参考变量, 并且创建你所要的按钮样式。当你创建ToolItem 按钮可以使用五种样式:
  
  SWT.PUSH :创建一个普通按钮。
  SWT.CHECK:创建一个单选框按钮,它能实现选择和取消选择之间的转换。
  SWT.RADIO :创建一个下拉列表框。
  SWT.SEPARATOR :在工具栏按钮之间增加间距(分栏符)。
  SWT.DROP_DOWN:创建一个附有下拉菜单的工具栏按钮
  
  创建一个文本―单一按钮:
  final ToolItem textItem = new ToolItem(bar, SWT.PUSH); textItem.setText("Open Child");
  
  向ToolItem增加图象与增加文本是非常相似, 除了你用setImage() 方法而不是setText() 方法。 首先, 您必须创建图象类的实例实现装载图片; 然后那个图象就和ToolItem联系在一起:
  
  Image icon = new Image(d, "c:\\icons\\JavaCup.ico");
  final ToolItem imageItem = new ToolItem(bar, SWT.PUSH);
  imageItem.setImage(icon);
  
  创建一个有图像和文本的ToolItem按钮,只要有简单的调用setImage() 和setText()方法的事件:
  Image icon = new Image(d, "c:\\icons\\JavaCup.ico");
  final ToolItem textImageItem = new ToolItem(bar, SWT.PUSH);
  textImageItem.setImage(icon);
  textImageItem.setText("Java Icon");
  Toolbar Example
  
  工具栏和菜单联合起作用, 经常在你创建的MenuItem对象和ToolItem对象之间通信。创建一个功能性工具栏,是从检查您的菜单代码决定哪个功能作为工具栏按钮的功能开始的。 如果在第三章你有看MenuShell例子, 你发现例子包括几个公有的工具栏方法。 在例子中有个创建工具栏的最佳的方案是打开和保存(从文件菜单), 并且剪切, 复制, 并粘贴(从编辑菜单) 。
  
  一旦你计划好了你的工具栏, 你就可以准备开发代码。
  
  我怎么做呢?
  
  Example 4-1示范如何创建窗体,如何完成实现工具栏和菜单。
  
  Example 4-1.创建工具栏的例子:
  
  import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.swt.widgets.*;
  public class ToolbarShellExample { Display d;
  Shell s;
  ToolbarShellExample() { d = new Display();
  s = new Shell(d);
  s.setSize(300,300);
  s.setImage(new Image(d, "c:\\icons\\JavaCup.ico"));
  s.setText("A Shell Toolbar Example");
  final ToolBar bar = new ToolBar(s,SWT.HORIZONTAL);
  bar.setSize(300,70);
  bar.setLocation(0,0);
  // create images for toolbar buttons final Image saveIcon = new Image(d, "c:\\icons\\save.jpg");
  final Image openIcon = new Image(d, "c:\\icons\\open.jpg");
  final Image cutIcon = new Image(d, "c:\\icons\\cut.jpg");
  final Image copyIcon = new Image(d, "c:\\icons\\copy.jpg");
  final Image pasteIcon = new Image(d, "c:\\icons\\paste.jpg");
  // create and add the button for performing an open operation final ToolItem openToolItem = new ToolItem(bar, SWT.PUSH);
  openToolItem.setImage(openIcon);
  openToolItem.setText("Open");
  openToolItem.setToolTipText("Open File");
  //create and add the button for performing a save operation final ToolItem saveToolItem = new ToolItem(bar, SWT.PUSH);
  saveToolItem.setImage(saveIcon); saveToolItem.setText("Save");
  saveToolItem.setToolTipText("Save File");
  //create and add the button for performing a cut operation final ToolItem cutToolItem = new ToolItem(bar, SWT.PUSH);
  cutToolItem.setImage(cutIcon); cutToolItem.setText("Cut");
  cutToolItem.setToolTipText("Cut");
  // create and add the button for performing a copy operation final ToolItem copyToolItem = new ToolItem(bar, SWT.PUSH);
  copyToolItem.setImage(copyIcon); copyToolItem.setText("Copy");
  copyToolItem.setToolTipText("Copy");
  // create and add the button for performing a paste operation final ToolItem pasteToolItem = new ToolItem(bar, SWT.PUSH);
  pasteToolItem.setImage(pasteIcon);
  pasteToolItem.setText("Paste");
  pasteToolItem.setToolTipText("Paste");
  // create the menu Menu m = new Menu(s,SWT.BAR);
  // create a File menu and add an Exit item final MenuItem file = new MenuItem(m, SWT.CASCADE);
  file.setText("&File");
  final Menu filemenu = new Menu(s, SWT.DROP_DOWN);
  file.setMenu(filemenu);
  final MenuItem openMenuItem = new MenuItem(filemenu, SWT.PUSH);
  openMenuItem.setText("&Open\tCTRL+O");
  openMenuItem.setAccelerator(SWT.CTRL+'O');
  final MenuItem saveMenuItem = new MenuItem(filemenu, SWT.PUSH);
  saveMenuItem.setText("&Save\tCTRL+S");
  saveMenuItem.setAccelerator(SWT.CTRL+'S');
  final MenuItem separator = new MenuItem(filemenu, SWT.SEPARATOR);
  final MenuItem exitMenuItem = new MenuItem(filemenu, SWT.PUSH);
  exitMenuItem.setText("E&xit");
  // create an Edit menu and add Cut, Copy, and Paste items final MenuItem edit = new MenuItem(m, SWT.CASCADE);
  edit.setText("&Edit");
  final Menu editmenu = new Menu(s, SWT.DROP_DOWN);
  edit.setMenu(editmenu);
  final MenuItem cutMenuItem = new MenuItem(editmenu, SWT.PUSH);
  cutMenuItem.setText("&Cut");
  final MenuItem copyMenuItem = new MenuItem(editmenu, SWT.PUSH);
  copyMenuItem.setText("Co&py");
  final MenuItem pasteMenuItem = new MenuItem(editmenu, SWT.PUSH);
  pasteMenuItem.setText("&Paste");
  //create a Window menu and add Child items final MenuItem window = new MenuItem(m, SWT.CASCADE);
  window.setText("&Window"); final Menu windowmenu = new Menu(s, SWT.DROP_DOWN);
  window.setMenu(windowmenu); final MenuItem maxMenuItem = new MenuItem(windowmenu, SWT.PUSH);
  maxMenuItem.setText("Ma&ximize");
  final MenuItem minMenuItem = new MenuItem(windowmenu, SWT.PUSH);
  minMenuItem.setText("Mi&nimize");
  // create a Help menu and add an About item final MenuItem help = new MenuItem(m, SWT.CASCADE);
  help.setText("&Help");
  final Menu helpmenu = new Menu(s, SWT.DROP_DOWN);help.setMenu(helpmenu);
  final MenuItem abouMenutItem = new MenuItem(helpmenu, SWT.PUSH);
  aboutMenuItem.setText("&About");
  // add action listeners for the menu items openMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Open");
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  saveMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Save");
  }Public void widgetDefaultSelected(SelectionEvent e) { } });
  exitMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.exit(0); }Public void widgetDefaultSelected(SelectionEvent e) { } });
  cutMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Cut");
  }Public void widgetDefaultSelected(SelectionEvent e) { } });
  copyMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Copy");
  }Public void widgetDefaultSelected(SelectionEvent e) { } });
  pasteMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Paste");
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  maxMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Shell parent = (Shell)maxItem.getParent().getParent();
  parent.setMaximized(true);
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  minMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Shell parent = (Shell)minItem.getParent().getParent();
  parent.setMaximized(false); } public void widgetDefaultSelected(SelectionEvent e) { } });
  aboutMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Help Invoked");
  } public void widgetDefaultSelected(SelectionEvent e) { }});
  s.setMenuBar(m);
  s.open();
  while(!s.isDisposed()){if(!d.readAndDispatch()) d.sleep();
  }d.dispose();}}
  
  创建的ToolbarShellExample实例如图4-1所示 。
  
  让按钮生效
  增加监听器
  
  在菜单(实际上, 所有的widget)中, 为各个按钮添加各自的监听器,为了适当的行为要给每个SelectionListener 的widgetSelected()方法编码。
  
 
  图4-1.带有工具栏的窗体

  
  下一步我怎么做
  
  监听器代码:
  openToolItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent event) { System.out.println("Open");
  } public void widgetDefaultSelected(SelectionEvent event) { }});
  saveToolItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent event) { System.out.println("Save");
  } public void widgetDefaultSelected(SelectionEvent event) { }});
  cutToolItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent event) { System.out.println("Cut");
  } public void widgetDefaultSelected(SelectionEvent event) { }});
  copyToolItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent event) { System.out.println("Copy");
  } public void widgetDefaultSelected(SelectionEvent event) {}});
  pasteToolItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent event) { System.out.println("Paste");
  } public void widgetDefaultSelected(SelectionEvent event) { } });
  
  增加上述代码, ToolbarShellExample构造器能实现工具栏按钮的功能(当被点击,打印消息)如图4-2所示 。
  
 
  图4-2.Eclipse 控制台

  
  关于。。。
  
  所有复制代码都在SelectionListener 类中. 面向对象的编程技术的一个目的是减少程序中被复制的代码的次数,正如你看到的,把widgetSelected() 代码添加到ToolItem对象与在我们创建的例子4-1中把它添加到MenuItem对象中是一样的。
  
  通过创建执行SelectionListener的接口的内部类这种情况将改变, 如例子4-2
  
  例子4-2. 内部类SelectionListeners:
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.SelectionEvent;
  import org.eclipse.swt.events.SelectionListener;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.swt.widgets.*;
  public class ToolbarShellExample { Display d;
  Shell s;
  ToolbarShellExample() { d = new Display();
  s = new Shell(d);
  s.setSize(300,300);
  s.setImage(new Image(d, "c:\\icons\\JavaCup.ico"));
  s.setText("A Shell Toolbar Example");
  final ToolBar bar = new ToolBar(s,SWT.HORIZONTAL);
  bar.setSize(500,70);
  bar.setLocation(0,0);
  // create images for toolbar buttons final Image saveIcon = new Image(d, "c:\\icons\\save.jpg");
  final Image openIcon = new Image(d, "c:\\icons\\open.jpg");
  final Image childIcon = new Image(d, "c:\\icons\\userH.ico");
  final Image cutIcon = new Image(d, "c:\\icons\\cut.jpg");
  final Image copyIcon = new Image(d, "c:\\icons\\copy.jpg");
  final Image pasteIcon = new Image(d, "c:\\icons\\paste.jpg");
  // create and add the button for performing an open operation final ToolItem openToolItem = new ToolItem(bar, SWT.PUSH);
  openToolItem.setImage(openIcon);
  openToolItem.setText("Open");
  openToolItem.setToolTipText("Open File");
  //create and add the button for performing a save operation final ToolItem saveToolItem = new ToolItem(bar, SWT.PUSH);
  saveToolItem.setImage(saveIcon);
  saveToolItem.setText("Save");
  saveToolItem.setToolTipText("Save File");
  final ToolItem sep1 = new ToolItem(bar, SWT.SEPARATOR);
  //create and add the button for performing a cut operation final ToolItem cutToolItem = new ToolItem(bar, SWT.PUSH);
  cutToolItem.setImage(cutIcon);
  cutToolItem.setText("Cut");
  cutToolItem.setToolTipText("Cut");
  // create and add the button for performing a copy operation final ToolItem copyToolItem = new ToolItem(bar, SWT.PUSH);
  copyToolItem.setImage(copyIcon);
  copyToolItem.setText("Copy");
  copyToolItem.setToolTipText("Copy");
  // create and add the button for performing a paste operation final ToolItem pasteToolItem = new ToolItem(bar, SWT.PUSH);
  pasteToolItem.setImage(pasteIcon);
  pasteToolItem.setText("Paste");
  pasteToolItem.setToolTipText("Paste");
  // create inner classes for SelectionListeners class Open implements SelectionListener { public void widgetSelected(SelectionEvent event) { System.out.println("Open");
  } public void widgetDefaultSelected(SelectionEvent event) { } } class Save implements SelectionListener { public void widgetSelected(SelectionEvent event) { System.out.println("Save");
  } public void widgetDefaultSelected(SelectionEvent event) { } } class Cut implements SelectionListener { public void widgetSelected(SelectionEvent event) { System.out.println("Cut");
  } public void widgetDefaultSelected(SelectionEvent event) { } } class Copy implements SelectionListener { public void widgetSelected(SelectionEvent event) { System.out.println("Copy");
  } public void widgetDefaultSelected(SelectionEvent event) { } } class Paste implements SelectionListener { public void widgetSelected(SelectionEvent event) { System.out.println("Paste");
  } public void widgetDefaultSelected(SelectionEvent event) { } } openToolItem.addSelectionListener(new Open());
  saveToolItem.addSelectionListener(new Save());
  cutToolItem.addSelectionListener(new Cut());
  copyToolItem.addSelectionListener(new Copy());
  pasteToolItem.addSelectionListener(new Paste());
  // create the menu system Menu m = new Menu(s,SWT.BAR);
  // create a File menu and add an Exit item final MenuItem file = new MenuItem(m, SWT.CASCADE);
  file.setText("&File");
  final Menu filemenu = new Menu(s, SWT.DROP_DOWN);
  file.setMenu(filemenu);
  final MenuItem openMenuItem = new MenuItem(filemenu, SWT.PUSH);
  openMenuItem.setText("&Open\tCTRL+O");
  openMenuItem.setAccelerator(SWT.CTRL+'O');
  final MenuItem saveMenuItem = new MenuItem(filemenu, SWT.PUSH);
  saveMenuItem.setText("&Save\tCTRL+S");
  saveMenuItem.setAccelerator(SWT.CTRL+'S');
  final MenuItem separator = new MenuItem(filemenu, SWT.SEPARATOR);
  final MenuItem exitMenuItem = new MenuItem(filemenu, SWT.PUSH);
  exitMenuItem.setText("E&xit");
  // create an Edit menu and add Cut, Copy, and Paste items final MenuItem edit = new MenuItem(m, SWT.CASCADE);
  edit.setText("&Edit");
  final Menu editmenu = new Menu(s, SWT.DROP_DOWN); edit.setMenu(editmenu);
  final MenuItem cutMenuItem = new MenuItem(editmenu, SWT.PUSH);
  cutMenuItem.setText("&Cut");
  final MenuItem copyMenuItem = new MenuItem(editmenu, SWT.PUSH);
  copyMenuItem.setText("Co&py");
  final MenuItem pasteMenuItem = new MenuItem(editmenu, SWT.PUSH);
  pasteMenuItem.setText("&Paste");
  //create a Window menu and add Child items final MenuItem window = new MenuItem(m, SWT.CASCADE);
  window.setText("&Window");
  final Menu windowmenu = new Menu(s, SWT.DROP_DOWN);
  window.setMenu(windowmenu);
  final MenuItem maxMenuItem = new MenuItem(windowmenu, SWT.PUSH);
  maxMenuItem.setText("Ma&ximize");
  final MenuItem minMenuItem = new MenuItem(windowmenu, SWT.PUSH);
  minMenuItem.setText("Mi&nimize");
  // create a Help menu and add an About item final MenuItem help = new MenuItem(m, SWT.CASCADE);
  help.setText("&Help"); final Menu helpmenu = new Menu(s, SWT.DROP_DOWN);
  help.setMenu(helpmenu);
  final MenuItem aboutMenuItem = new MenuItem(helpmenu, SWT.PUSH);
  aboutMenuItem.setText("&About");
  // add action listeners for the menu items openMenuItem.addSelectionListener(new Open());
  saveMenuItem.addSelectionListener(new Save());
  exitMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.exit(0);
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  cutMenuItem.addSelectionListener(new Cut());
  copyMenuItem.addSelectionListener(new Copy());
  pasteMenuItem.addSelectionListener(new Paste());
  maxMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Shell parent = (Shell)maxMenuItem.getParent().getParent( );
  parent.setMaximized(true);
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  minMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Shell parent = (Shell)minMenuItem.getParent().getParent( );
  parent.setMaximized(false);
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  aboutMenuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println("Help Invoked");
  } public void widgetDefaultSelected(SelectionEvent e) { } });
  s.setMenuBar(m); s.open();
  while(!s.isDisposed()){ if(!d.readAndDispatch()) d.sleep();
  } d.dispose(); }}
  
  刚刚是怎么回事?
  
  如你从例子4-2中明白,被复制的代码行数的数量被减少。通过给每个SelectionListener增加内部类并把它在菜单目录和工具栏按钮共享,复制的次数将减少。 例如, 内部类的开放功能如下:
  
  class Open implements SelectionListener{public void widgetSelected(SelectionEvent event) {System.out.println("Open");}public void widgetDefaultSelected(SelectionEvent event) {} }
  
  在那时,内部类被用为菜单项目和工具栏按钮调用每个addSelectionListener() 方法:
  openToolItem.addSelectionListener(new Open());
  openMenuItem.addSelectionListener(new Open());
  
  任一方法都是合法的:哪个跟你的编码的方式最匹配是选择的宗旨。
  
  为工具栏增加分离器
  
  分离器使您编组工具栏按钮入功能区域。 如果您看您创造和执行在表4-1 的工具栏, 您看见, 有两三个功能区域。第一个是打开和保存功能。第二个是剪切,拷贝,和粘贴功能。如同现在看起来,当用户盯着工具栏看的时候,没什么可以从彼此中区分这两个功能区域。为了能在视觉上分别, 你必须增加分离器。
  
  我怎么做
  
  创建分离器:
  final ToolItem separator = new ToolItem(bar, SWT.SEPARATOR);
  
  如果您把这个代码行在您想分离器出现的地点插入(在创建保存按钮和代码创建剪切按钮),工具栏在图4-3-a k中有明显的改善。
  
 
  图4-3.分离器中的工具栏

  
  增加单选和多选ToolItems
  
  在工具栏按钮在未被选择之前给用户提供视觉反馈一般对用户是有用的。当你需要用户从一系列选择中挑选时真的好用。在第三章中你学会了怎样在菜单系统中提供视觉提示。使用检查菜单项目来显示在已选择的项目旁边的检查号。使用多选菜单使用户可以选择一组选项中一个并且只能是一个。两类项目提供视觉指示器的可供选择的选项。
  
  当你创造一个ToolItem 实例时,如果你使用SWT.CHECK 或者 SWT.RADIO的风格你能在你的工具栏上提供一样类型的功能。
  
  我怎么做
  
  和所有widget一样,你可以通过改变风格来简单地改变工具栏对象的外观和功能。思考以下代码:
  final ToolItem sep2 = new ToolItem(bar, SWT.SEPARATOR);
  final ToolItem checkItem = new ToolItem(bar, SWT.CHECK);
  checkItem.setText("Check");
  final ToolItem sep3 = new ToolItem(bar, SWT.SEPARATOR);
  final ToolItem radioItem1 = new ToolItem(bar, SWT.RADIO);
  radioItem1.setText("Radio 1");
  final ToolItem radioItem2 = new ToolItem(bar, SWT.RADIO);
  radioItem2.setText("Radio 2");
  final ToolItem sep4 = new ToolItem(bar, SWT.SEPARATOR);
  final ToolItem radioItem3 = new ToolItem(bar, SWT.RADIO);
  radioItem3.setText("Radio 3");
  final ToolItem radioItem4 = new ToolItem(bar, SWT.RADIO);
  radioItem4.setText("Radio 4");
  
  增加这个代码到ToolbarShellExample 的版本,结果在Example 4-1中被创建如图4-4所示。
  
 
  图4-4. 单选或者多选风格按钮的工具栏

  
  刚刚是怎么回事?
  
  当这个窗口打开, 所有工具栏按钮将是在他们的未选状态, 如图4-4所示 。点击单选按钮使按钮成点击状态, 如图4-5所示
  
  对于用户来讲这个显示状态代表选项被选中的状态。第二次点击按钮退回到它的未选状态。
  
  单选按钮的行为与多选的按钮是不一样的。 至于多选按钮, 只是组中任意一个成员被选中
  
 
  图4-5 。 在特定的时间的被选中按钮的一个按钮的状态。

  
  彼此直接相邻的按钮被当成一组的一部分。如果在两个单选按钮之间创建另一个ToolItem――即使是分离器――他们仍是在两个不同的组。
  
  在图4-4中, 有两个单选组。在单选按钮1和单选按钮2的按钮标签是一组的,而在单选按钮3和单选按钮4的按钮标签是第二组的。您可以选择或单选按钮一或单选按钮二, 并且或单选按钮三或单选按钮四, 但您不可以选择单选按钮一和单选按钮二, 或单选按钮三和单选按钮四。
  
  确定是否单选或多选按钮被选择
  
  如果你使用多选或者单选风格的工具栏项目,为决定按钮的在当前状态在某个地方你必须把你的代码中演示成多选。
  
  在SelectionListener――或者代码的其他模块――不管多选或单选项目有没有通过调用ToolItem相同的方式来选中,你可以决定菜单项目生效,而getSelection() 方法是:
  checkItem.addSelectionListener(new SelectionListener() {public void widgetSelected(SelectionEvent event) {if(checkItem.getSelection()) { System.out.println("Check");
  } else { System.out.println("Uncheck");
  } } public void widgetDefaultSelected(SelectionEvent event) { }});
  
  为widgetSelected() 方法开发的代码取决于应用程序。在调用System.out.println()方法的地方,你可以设置一布尔变量,用来防止程序逻辑溢出。或者你可以在类这一级定义所有的工具项而且当需要时能调用getSelection()方法。
  
  使用工具提示
  
  工具提示文本给用户正要点击工具栏按钮的时候提供一关于功能的提示。无论用户何时将鼠标停顿在一个按钮上时,提示都会一个浮动的文本在鼠标点的地方上显示。
  
  我怎么做
  
  SWT 使工具提示非常容易创建。通过调用setToolTipText()方法,所有你只要做的只是将需要的文字输到ToolItem即可。当鼠标移动到打开的按钮时添加一条线到你的ToolbarShell例子,产生的结果如图4-6所示:
  
  openItem.setToolTipText("Open File");
  
 
  图4-6 .带有工具提示文本的工具栏按钮

  
  SWT提供了你要创建精练的工具栏的所有的东西,这种工具栏是用户希望在几乎你所有程序都出现的东西。正如最后三章所写的,SWT 使的创建窗口变的简单,那是你的应用程序的基础。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章