11.5.1 菜单构建
1.构建菜单栏
//菜单栏构建
JMenuBar menuBar = new JMenuBar();
//将菜单栏添加入frame中
frame.setJMenuBar(menuBar);
2.构建菜单对象
//创建菜单对象
JMenu editMenu = new JMenu("Edit");
//将菜单对象添加到菜单栏中
menuBar.add(editMenu);
3.添加菜单项
//创建菜单项
JMenuItem pasteItem = new JMenuItem("paste");
//向菜单对象中添加菜单项
editMenu.add(pasteItem);
//向菜单对象中加入分隔符
editMenu.addSeparator();
//向菜单对象中添加子菜单对象
JMenu optionsMenu = new JMenu("options");
editeMenu.add(optionsMenu);
//创建菜单项的另外一种方法JMenu.add(String s)
JMenuItem copyItem = editMenu.add("paste");
4.为菜单项添加监听器
ActionListener listener = ...;
pasteItem.addActionListener(listener);
11.5.2 菜单项中的图标
实际上,JMenuItem扩展了AbstractionButton类。与按钮一样,菜单项可以只包含图标、只包含文本标签或两者都包含。可以使用JMenuItem(String , Icon)或JMenuItem(Icon构造器来创建菜单项,也可以使用从AbsractionButton类继承的setIcon方法指定一个图标。
//创建一个带图标的菜单项
JMenuItem cutItem = new JMenuItem("cut", new ImageIcon("cut.gif"));
//默认情况下,菜单项文本在图标右侧,可以调用以下方法将文本放置在左侧。
cutItem.setHorizontalTextPosition(SwingConstans.LEFT);
11.5.3复选框和单选按钮菜单项
复选框和单选按钮菜单项会在菜单名旁边显示一个复选框或一个单选按钮。
1.复选框菜单项
//创建复选框菜单项
JCheckBoxMenuItem checkBoxMenuItem1 = new JCheckBoxMenuItem("复选框1");
JCheckBoxMenuItem checkBoxMenuItem2 = new JCheckBoxMenuItem("复选框2");
//讲复选框菜单项添加到菜单对象中
optionsMenu.add(checkBoxMenuItem1);
optionsMenu.add(checkBoxMenuItem2);
2.单选按钮菜单项
//创建单选按钮菜单项
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem("单选按钮1");
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem("单选按钮2");
//将其加入按钮组中
ButtonGroup group = new ButtonGroup();
group.add(radioButtonMenuItem1);
group.add(radioButtonMenuItem2);
//将其加入到菜单对象中
optionsMenu.add(radioButtonMenuItem1);
optionsMenu.add(radioButtonMenuItem2);
11.5.4 弹出菜单
弹出菜单(pop-up menu)是不固定在菜单栏中随处浮动的菜单。
1.创建弹出菜单
//创建弹出菜单
JPopupMenu popupMenu = new JPopupMenu();
//用常规方法添加菜单项
JMenuItem item = new JMenuItem("haha");
popupMenu.add(item);
2.让用户点击一个组件时弹出菜单(弹出式触发器是鼠标次键)
component.setComponentPopupMenu(popupMenu);
//让子组件继承父组件的弹出菜单
child.setInheritsPopupMenu(true);
11.5.5 键盘助记符和加速器
1.为菜单项设置助记符
//利用构造器JMenuItem(String,char)
JMenuItem item = new JMenuItem("About",'A');
//指定字符加下划线
item.setDisplayedMnemonicIndex(1);
2.为菜单对象添加助记字母
//菜单对象无法利用构造器添加助记符
//而是调用setDisplayedMnemonicIndex(int index)方法
JMenu helpMenu = new JMenu("Help");
helpMenu.setMnemonic('H');
3.添加加速器组合键
加速器只能关联到菜单项,不能关联到菜单对象。加速器键不能真正打开菜单。实际上,加速器会直接出发与菜单关联的动作事件。
当加速器添加到菜单项时,对应的组合键会自动的显示在菜单中。
openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
11.5.6 启用和禁用菜单项
1.方法一:每次环境发生变化时都找到需要启用或禁用的菜单项,启用或禁用菜单项需要调用setEnabled方法
//禁用
saveItem.setEnabled(false);
//启用
saveItem.setEnabled(true);
2.方法二:为“菜单选中”事件注册一个监听器。
javax.swing.event包定义了一个MenuListener接口
MenuListener包含三个方法
//菜单被选择但尚未打开时调用
void menuSelected(MenuEvent e)
//在菜单被取消选择并且已经关闭后调用
void munuDeselected(MenuEvent e)
//当菜单被取消时调用,例如:用户点击菜单以外的区域
void menuCanceled(MenuEvent e)
//example
JMenu editMenu = new JMenu("Edit");
editMenu.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent e) {
textArea.setText("selected");
}
@Override
public void menuDeselected(MenuEvent e) {
textArea.setText("deselected");
}
@Override
public void menuCanceled(MenuEvent e) {
textArea.setText("cancel");
}
});
11.5.7 工具条
1.创建工具条
//工具条创建(默认水平)
JToolBar toolBar = new JToolBar();
//指定工具条标题
JToolBar toolBar = new JToolBar(titleString);
//创建竖直工具条
JToolBar toolBar = new JToolBar(SwingConstans.VERTICAL);
JToolBar toolBar = new JToolBar(titleString,SwingConstans.VERTICAL);
2.可以将组建添加到工具条中
JToolBar toolBar = new JToolBar();
//工具条中最常用的组件时按钮
toolBar.add(blueButton);
//可以用Action对象填充工具条
toolBar.add(blueAction);
//添加分隔符
toolBar.addSeparator()
11.5.8 工具提示
1.在Swing中,可以调用任何setToolTipText方法将工具提示添加到任何JComponent上
exitButton.setToolTipText("Exit");
2.或者,如果使用Action对象,可以用SHORT_DESCRIPTION关联工具提示
exitAction.putValue(Action.SHORT_DESCRIPTION,"Exit");