我准备让所有JMenuItem用menuHandler这个内部类进行监听,然后在内部类中用getSource区分对象,但是没有响应(其他对象可以但MenuItem就是没有反应),而如果用getActionCommand()=="Exit"话则可以,原因是什么?先谢谢了部分代码如下(仅表现退出功能):public class Swpr extends JFrame{
JMenuItem exitItem;
public Swpr(){
MenuHandler menuHandler = new MenuHandler();
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
exitItem.addActionListener( menuHandler );
gMenu.add(exitItem);
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(gMenu);
} private class MenuHandler implements ActionListener{
public void actionPerformed (ActionEvent e){
if (e.getSource()==exitItem){
if (JOptionPane.showConfirmDialog(Swpr.this, "Confirm exit?", "" , JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)==0)
System.exit(0);
}
}
}
JMenuItem exitItem;
public Swpr(){
MenuHandler menuHandler = new MenuHandler();
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
exitItem.addActionListener( menuHandler );
gMenu.add(exitItem);
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(gMenu);
} private class MenuHandler implements ActionListener{
public void actionPerformed (ActionEvent e){
if (e.getSource()==exitItem){
if (JOptionPane.showConfirmDialog(Swpr.this, "Confirm exit?", "" , JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)==0)
System.exit(0);
}
}
}
解决方案 »
- 求解if (input.hasNextDouble()==true)什么意思
- 输入分号后,怎样隐藏ContentAssistant?
- JList的事件valueChanged()怎么老是执行两次啊??!!
- 怎样用JLabel来显示图片?
- 关于Jsp程序使用注册问题
- public class Vector<E>,其中的<>和E是什么意思?
- 判断字符串相同以后,如何删掉重复的字符串?
- 急!急!!一个JAVA问题,在线等待,忘帮忙!!
- 请教高人:为什么会出现:virtuallab.java:15: cannot resolve symbol等等
- 怎么把application生成可执行文件?
- 一个简单的socket实例,大家看看问题出在哪?
- 在校生该如何学习好java?以便适应社会的需求
JMenuItem exitItem;
public Swpr(){
MenuHandler menuHandler = new MenuHandler();
//exitItem 已经在外面声明了,你试试可以不
exitItem = new JMenuItem("Exit");
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
exitItem.addActionListener( menuHandler );
gMenu.add(exitItem); JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(gMenu);
} private class MenuHandler implements ActionListener{
public void actionPerformed (ActionEvent e){
if (e.getSource()==exitItem){
if (JOptionPane.showConfirmDialog(Swpr.this, "Confirm exit?", "" , JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)==0)
System.exit(0);
} }
}
将构造器中定义exitItem的类说明删去即可,改为:exitItem = new JMenuItem("Exit");
那此时内部类中的exitItem是指向了哪个?
构造器里写上类说明会造成找不到exitItem?
能否解释一下,谢了