在编写AWT组件的时候,有时需要将菜单分类,这个时候可以用下划线来分类。
那么增加下划线的方法是:
this.menu[i].addSeparator();
下面看看动态给菜单加上快捷键
JMenuItem有一个方法不知道你注意过没有:setAccelerator。
打开帮助文件对这个方法的描述是: 设置组合键,它能直接调用菜单项的操作侦听器而不必显示菜单的层次结构。所以用这个方法就能制作我们所要的快捷键了。
F5: KeyStroke.getKeyStroke(KeyEvent.F5, 0);
Ctrl+Q: KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK);
a: KeyStroke. getKeyStroke('a');
Alt+Shift+C:KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
当然,如果你不想引入一些如KeyEvent或InputEvent类的话,那么你就可以用KeyStroke.getKeyStroke(String s)方法来简化他:
F5: KeyStroke.getKeyStroke("F5");
Ctrl+Q: KeyStroke.getKeyStroke("control Q ");
a: KeyStroke.getKeyStroke( "typed a" );
Alt+Shift+C:KeyStroke.getKeyStroke("alt shift released X ");
在这里插入代码片
下面看看具体的例子:
package cn.com;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
public class AwtTest extends JFrame
{
private JMenuBar menuBar; //菜单条
private JMenu[] menu; //菜单
private JMenuItem[][] menuItem; //菜单条
public void init()
{
//成员变量实例化
this.menuBar=new JMenuBar();
this.menu=new JMenu[] {new JMenu("File"),new JMenu("Edit"),new JMenu("Source")};
this.menuItem=new JMenuItem[][]{
{new JMenuItem("New"), new JMenuItem("Open File"), new JMenuItem("Close")},
{new JMenuItem("Paste"), new JMenuItem("Delete")},
{new JMenuItem("Format"), new JMenuItem("Clean Up")}
};
this.setJMenuBar(this.menuBar); //添加菜单条
this.menu[0].add(this.menuItem[0][0]);
/*
* 添加下划线
*/
this.menu[0].addSeparator();
this.menu[0].add(this.menuItem[0][1]);
this.menu[0].add(this.menuItem[0][2]);
for (int i=1; i<this.menu.length; i++)
{
for (int j=0; j<this.menuItem[i].length; j++)
{
this.menuItem[1][j].setAccelerator(KeyStroke.getKeyStroke("control Q "));
this.menuItem[2][j].setAccelerator(KeyStroke.getKeyStroke("typed a "));
this.menu[i].add(this.menuItem[i][j]);
if (j!=this.menuItem[i].length-1)
this.menu[i].addSeparator();
}
}
for (int i=0; i<this.menu.length; i++)
{
this.menuBar.add(this.menu[i]);
}
//注册窗口监视器
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//窗口属性设置
this.setTitle("菜单应用");
this.setVisible(true);
this.setLocationRelativeTo(null);
this.setSize(400,500);
}
public AwtTest()
{
init();
}
public static void main(String args[])
{
AwtTest winAwtTest=new AwtTest();
}
}