在主窗口的菜单项上单击,出来一个子窗口,如果再次单击这个菜单项又会出来一个新的同样的子窗口。
问题就是怎样在单击菜单项的时候,只显示一个子窗口,不让他显示第2个同样的子窗口呢?

解决方案 »

  1.   

    不要在点击动作中出现new JFrame
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;public class Test extends JFrame {
    private static final long serialVersionUID = -2865136880741559697L; private JButton button = null;

    private JFrame frame = null;

    public Test() {
    frame = new JFrame("Window");
    frame.setSize(200, 100);
    button = new JButton("show window");
    button.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    frame.setVisible(true);
    }});
    this.getContentPane().add(button);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(300, 200);
    this.setVisible(true);
    } public static void main(String[] args) {
    new Test();
    }
    }
      

  2.   

    楼上还是麻烦你在看看我的代码!import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenuBar;public class test extends JFrame {
    //private static final long serialVersionUID = -2865136880741559697L; public test(){
    JFrame jf=new JFrame("主窗体");
    JMenuBar jmb=new JMenuBar();
    JMenu jm=new JMenu("文件");
    final JMenuItem jmi=new JMenuItem("打开");
    jm.add(jmi);
    jmb.add(jm);
    jf.getContentPane().add(jmb);
    jf.setSize(500,500);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);
    jmi.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    Object oo=e.getSource();

    if(oo.equals(jmi))
    {new test2();
    }

    }});


    };
    public static void main(String[] args) {
    new test();
    }
    }----------
    import javax.swing.JFrame;public class test2 extends JFrame{
    public test2(){
    JFrame jf=new JFrame("2窗体");
    jf.setSize(300,300);
    jf.setVisible(true);
    }
    public static void main(String[] args) {
    new test2();
    }
    }-----
    两个JAVA文件,在同一个包中,当单击窗口中的打开选项时显示test2中的窗口,那么再次单击的时候又出现同样的第2个窗口,现在问题就是怎么样让程序判断如果出现过窗口后,再次单击打开选项时就不出现第2个新窗口了,把原来第1次显示出来的窗口显示就可以了!
      

  3.   

    在动作中不要出现new,那代表一个新的JFrame实例被初始化。
    按照你的代码改了一下:import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenuBar;public class test extends JFrame {
    private test2 t_2 = null; public test(){
    t_2 = new test2();
    JFrame jf=new JFrame("主窗体");
    JMenuBar jmb=new JMenuBar();
    JMenu jm=new JMenu("文件");
    final JMenuItem jmi=new JMenuItem("打开");
    jm.add(jmi);
    jmb.add(jm);
    jf.getContentPane().add(jmb);
    jf.setSize(500,500);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);
    jmi.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    Object oo=e.getSource();
    if(oo.equals(jmi)){
    t_2.setVisible(true);
    } }
    }); } public static void main(String[] args) {
    new test();
    }
    }import javax.swing.JFrame;public class test2 extends JFrame{ public test2(){
    super("2窗体");
    this.setSize(300,300);
    }}
      

  4.   

    替换下面这段代码:
    jmi.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    Object oo=e.getSource();
    if(oo.equals(jmi)){
    if(t_2.getExtendedState() == 1) {
    t_2.setExtendedState(0);
    }
    if(t_2.getExtendedState() == 7){
    t_2.setExtendedState(6);
    }
    t_2.setVisible(true);
    }
    }
    });