1.创建菜单:首先要创建一个菜单栏:JMenuBar menuBar = new JMenuBar();
可以调用setJMenuBar方法将菜单栏添加到框架上:frame.setJMenuBar(menuBar);
需要为每个菜单建立一个菜单对象:JMenu editMenu = new JMenu("Edit");
然后将顶层菜单添加到菜单栏中:menuBar.add(editMenu);
2.向菜单对象中添加菜单项,分隔符和子菜单:
JMenuItem pa对象的steItem = new JMenuItem("Paste");
editMenu.add(pasteItem);
editMenu.addSeparator();//添加分隔符
JMenu optionMenu = ...//子菜单
editMenu.add(optionMenu);
3.当用户选择菜单时,将触发一个动作事件,需要为每个菜单项安装一个动作监听器,如pasteItem.addActionListener(...);
4.也可以通富哦Action对象来指定命令。通常,采用扩展抽象类AbstractAction类定义一个实现Action接口的类,需要在AbstractAction对象的构造器中指定菜单项标签并且覆盖actionPerformed方法来获得菜单动作处理器,如:Action exitAction = new AbtractAction(“Exit”){
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
}
然后将动作添加到菜单中:JMenuItem exitItem = fileMenu.add(exitAction);
5.菜单项中的图标
(1)既可以利用JMenuItem(String,Icon)或者利用 JMenuItem类中的setIcon方法指定一个图标如:JMenuItem cutItem = new JMenuItem(“Cut”,new ImageIcon(“cut.gif”));
(2)默认情况下,菜单项的文本被放置在图标的右侧,可以调用JMenuItem类中的setHorizontalTextPosition方法设置。如cutItem。setHorizontalTextPosition(SwingConstants.LEFT)
(3)可以讲一个图标添加到一个动作上:cutAction.putValue(Action.SMALL_ICON,new ImageIcon("cut.gif"));Action.NAME值将会作为菜单项的文本,而Action.SMALL_ICON将会作为图标
(4)可以利用AbastractAction构造器设置图标:
cutAction = new AbstractAction("cut",new ImageIcon("cut.gif")) {
public void actionPerformed(ActionEvent event) {
...}
};
6.复选框和单选按钮菜单项
(1)创建复选框菜单项的代码:JCheckBoxMenuItem readonlyItem = new JCheckBoxMenuItem(“Read-Only”);
optionMenu.add(readonlyItem);
(2)创建单选按钮(与普通按钮饿工作方式一样,必须将他们加入到按钮组中)代码如下:ButtonGroup group = new ButtonGroup();JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem(“Insert”);insertItem.setSelected(true);JRadioButtonMenuItem overtypeItem = new JRadioButtonMenuItem("Overtype");group.add(insertItem)
; group.add(insertItem);group.add(overtypeItem);optionsMenu.add(insertItem);optionsMenu.add(overtypeItem); 使用这些菜单项,不需要立刻得到用户选择菜单项的通知,而是使用isSelected方法来测试菜单项的当前状态。
7.弹出菜单 (JPopuoMenu)
(1) 创建一个弹出菜单,但是弹出菜单没有标题。JPopupMenu popup = new JPopupMenu();
(2)然后常规的方法添加菜单项:JMenuItem item = new JMenuItem(“Cut”);
item.addActionListener(listener);
popup.add(item);
(3)弹出菜单并不像常规菜单栏那样显示在框架的顶部,必须调用show方法菜单才能显示出来,调用时需要给出父组件以及相对父组件坐标的显示位置;方法为
popup.show(panel,x,y);
(4)当用户点击某个鼠标键时弹出菜单,这就是所谓的弹出式触发器,在Windows或者Linux中,弹出式触发器是鼠标右键,要想在用户点击某一个组件时弹出菜单,需要按照下列方式调用方法:component.setComponentPopupMenu(popup);
(5)遇到在一个弹出菜单中的组件中设置一个组件的情况,这个子组件可以调用下列方法继承父组件的弹出菜单,调用child.setInheritPopupMenu(true);
(6)必须安装鼠标监听器,并将下列代码添加到mousePressed和mouseReleased监听器中,if(popup.isPopupTrigger(event))
popup.show(event.getComponent(),event.getX(),event.getY());
8.快捷键和加速器
(1)可以通过在菜单项的构造器中指定一个快捷字母来为菜单项设置快捷键:JMenuItem aboutItem = new JMenuItem("About","A");
快捷键会自动地显示在菜单项中,并带有一条下划线
(2)可以调用setDisplayedMnemonicIndex方法指定希望加下划线的字符
(3)如果有一个Action对象,就可以把快捷键作为Action.MNEMONIC_KEY的键值添加到对象中。如:cutAction.putValue(Action.MNEMCNIC_KEY,new Integer("A"));
注:只能在菜单项的构造器中设定快捷键字母,而不是菜单构造器中
(4)为菜单设置快捷键,需要调用setMnemonic方法:JMenu helpMenu = new JMenu(“Help”);
helpMenu.setMnemonic("H");
(5)可以使用setAccelerator将加速器键关联到一个菜单项上,这个方法使用KeyStroke类型的对象作为参数:如:openItem.setAccelerator(keyStroke.getKeyStroke("ctrl o"));
加速器只能关联到菜单项上,不能关联到菜单上
9.启用或禁用菜单项需要调用setEnabled方法:saveItem.setEnabled(false)
(1)启用和禁用菜单项有两种策略:
第一种:每次环境发生变化就对相关的菜单项或动作调用setEnabled
第二种:在显示菜单之前就禁用这些菜单项,必须为“menu selected”事件注册监听器,javax.swing.event包定义了MenuListener接口,它包含三个方法:
void menuSelected(MenuEvent event)//在菜单被选择但尚未打开之前调用
void menuDeselected(MenuEvent event)//在菜单被取消选择并且已经关闭之后被调用
void menuCanceled(MenuEvent event)//在菜单被取消时调用
举例如下:public void menuSelected(MenuEvent event) {
saveAction.setEnabled(!readonlyItem.isSelected());
}
10.工具栏 (JToolBar)(只有位于采用边框布局或者任何支持North,East,South和West约束布局管理器的容器内才能够被拖拽)
(1)创建工具栏:JToolBar bar = new JToolBar();
bar.add(blueButton);
(2)JToolBar类还有一个用来添加Action对象的方法,可以用Action对象填充:bar.add(blueAction);
(3)可以用分隔符将按钮分组:bar.addSeparator();
(4)将工具栏添加到框架中:add(bar,BorderLayout.NORTH);
(5)当工具栏没有停靠时,可以指定工具栏的标题:bar = new JToolBar(titleString);
(6)默认情况下,工具栏最初为水平的,将工具栏垂直放置可以使用下列代码:bar = new JToolBar(SwingConstants.VERTICAL)或者bar = new JToolBar (tileString,SwingConstants.VERTICAL)
(7)在Swing中,可以调用setToolText方法将工具提示添加到JComponent上:exitButton.setToolTipText("Exit"); 另外一种方法是,如果使用Action对象,就可以用SHORT_DESCRIPTION关联工具提示:exitAction.putValue(Action.SHORT_DESCRIPTION,"Exit")