各位大虾看看我代码,出来后窗口要关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);
}
}}
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);
}
}}
jmi1.addActionListener(this);//一次注册
jmi1.setActionCommand("open");
jmi1.setMnemonic('o');jmi2=new JMenuItem("保存(S)");
jmi2.setMnemonic('s');
jmi1.addActionListener(this);//二次注册因此要关两次
jmi2.setMnemonic('s');
jmi1.addActionListener(this);BUG,jm2的Listener加到jm1上去了引出一个问题,就是变量命名要有实际意义,1,2,3,4之类的命名不仅不好看,更容易出错
也是没必要的
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);}}}