各位大虾看看我代码,出来后窗口要关2次 不知道原因
public class NoteBook extends JFrame implements ActionListener{ /**
 * @param args
 */
JMenu jm=null;
JMenuBar jmb=null;
JMenuItem jmi1=null;
JMenuItem jmi2=null;
JTextArea jta=null;


public static void main(String[] args) {

         NoteBook nb=new NoteBook();
} public NoteBook(){

jm=new JMenu("文件(F)");
jm.setMnemonic('f');
jmb=new JMenuBar();

jmi1=new JMenuItem("打开(O)");
jmi1.addActionListener(this);
jmi1.setActionCommand("open");
jmi1.setMnemonic('o');

jmi2=new JMenuItem("保存(S)");
jmi2.setMnemonic('s');
jmi1.addActionListener(this);
//jmi1.setActionCommand("save");

jta=new JTextArea();

this.setJMenuBar(jmb);
jmb.add(jm);
jm.add(jmi1);
jm.add(jmi2);

this.setTitle("记事本");
this.setBounds(400,100,400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.add(jta);
this.setVisible(true);
}



public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("open")){

JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("打开....");
jfc.showOpenDialog(null);
jfc.setVisible(true);

}

}}

解决方案 »

  1.   

    jmi1=new JMenuItem("打开(O)");
    jmi1.addActionListener(this);//一次注册
    jmi1.setActionCommand("open");
    jmi1.setMnemonic('o');jmi2=new JMenuItem("保存(S)");
    jmi2.setMnemonic('s');
    jmi1.addActionListener(this);//二次注册因此要关两次
      

  2.   

    jmi2=new JMenuItem("保存(S)");
    jmi2.setMnemonic('s');
    jmi1.addActionListener(this);BUG,jm2的Listener加到jm1上去了引出一个问题,就是变量命名要有实际意义,1,2,3,4之类的命名不仅不好看,更容易出错
      

  3.   

    而且jfc.setVisible(true);
    也是没必要的
      

  4.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JTextArea;public class NoteBook extends JFrame implements ActionListener{/**
    * @param args
    */
    JMenu jm=null;
    JMenuBar jmb=null;
    JMenuItem jmi1=null;
    JMenuItem jmi2=null;
    JTextArea jta=null;
    JFileChooser jfc;public static void main(String[] args) {NoteBook nb=new NoteBook();
    }public NoteBook(){jm=new JMenu("文件(F)");
    jm.setMnemonic('f');
    jmb=new JMenuBar();jmi1=new JMenuItem("打开(O)");
    jmi1.addActionListener(this);
    jmi1.setActionCommand("open");
    jmi1.setMnemonic('o');jmi2=new JMenuItem("保存(S)");
    jmi2.setMnemonic('s');
    jmi2.addActionListener(this);这个地方你写错了,可能是笔误,你调用了2次jmi1的actionListener
    //jmi1.setActionCommand("save");jta=new JTextArea();this.setJMenuBar(jmb);
    jmb.add(jm);
    jm.add(jmi1);
    jm.add(jmi2);this.setTitle("记事本");
    this.setBounds(400,100,400, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.add(jta);
    this.setVisible(true);
    }public void actionPerformed(ActionEvent e) {if(e.getActionCommand().equals("open")){ jfc=new JFileChooser();
    jfc.setDialogTitle("打开....");
    jfc.showOpenDialog(null);
    jfc.setVisible(true);}}}