Java 在执行操作时仅打开一个窗口

Java 在执行操作时仅打开一个窗口,java,swing,jframe,actionlistener,Java,Swing,Jframe,Actionlistener,我已经浏览了关于如何在单击按钮时只打开一个窗口的主题,但是没有一个解决方案有帮助,可能是因为我的代码的结构有点不同 因此,我有一个扩展JFrame的主窗口类,其中一个按钮应该在单击时打开一个新窗口。我已经在一个单独的类中为新窗口定义了小部件/面板等。现在,每次我点击按钮,就会打开一个新窗口。我想让它,如果一个窗口已经打开,然后它会切换到该窗口,一旦按钮再次点击 下面是我的一些代码: public class MainWindow extends JFrame{ /* * cr

我已经浏览了关于如何在单击按钮时只打开一个窗口的主题,但是没有一个解决方案有帮助,可能是因为我的代码的结构有点不同

因此,我有一个扩展JFrame的主窗口类,其中一个按钮应该在单击时打开一个新窗口。我已经在一个单独的类中为新窗口定义了小部件/面板等。现在,每次我点击按钮,就会打开一个新窗口。我想让它,如果一个窗口已经打开,然后它会切换到该窗口,一旦按钮再次点击

下面是我的一些代码:

public class MainWindow extends JFrame{

    /*
     * create widgets and panels
     */
    Button.addActionListener(new ActionListener() { // the button that opens 
                                                    //a new window

                @Override
                public void actionPerformed(ActionEvent e) {
                    Window2 ww = new Window2(); //creating the new window here

                }
            });
    }
NB。Window2类也在扩展JFrame,如果有帮助的话。


谢谢这里有一个完整的工作示例:

Window2.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}
MainWindow.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}

下面是一个完整的工作示例:

Window2.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}
MainWindow.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}

下面是一个完整的工作示例:

Window2.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}
MainWindow.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}

下面是一个完整的工作示例:

Window2.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}
MainWindow.java

public class Window2 extends JFrame {

    private static final long serialVersionUID = 7843480295403205677L;

}
public class MainWindow extends JFrame {

    private static final long serialVersionUID = -9170930657273608379L;

    public static void main(String[] args) {
        MainWindow mw = new MainWindow();
        mw.go();
    }

    private void go() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private void createAndShowGUI() {
        JButton button = new JButton("Click me");

        button.addActionListener(new ActionListener() {

            private Window2 ww = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ww==null) {
                    ww = new Window2(); //creating the new window here
                    ww.setDefaultCloseOperation(HIDE_ON_CLOSE);
                    ww.setTitle("Window2 created on " + new Date());
                    ww.setSize(500, 200);
                }

                pack();
                ww.setVisible(true);
            }
        });

        setLayout(new BorderLayout());
        add(button);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        pack();
        setVisible(true);
    }
}

您可以尝试创建两个窗口并将actionPeformed方法放在主类中,这样当按下按钮时,它将显示第二个窗口

您可以尝试创建两个窗口并将actionPeformed方法放在主类中,这样当按下按钮时,它将显示第二个窗口

您可以尝试的是make两个窗口并将actionPeformed方法放入主类,这样当按下按钮时,它将显示第二个窗口

您可以尝试创建两个窗口并将actionPeformed方法放入主类,这样当按下按钮时,它将显示第二个窗口

actionPerformed
方法,因为每次单击按钮时,它都会创建新对象。以下内容可以帮助您:-

  • 制作Window2类singalton,了解有关singalton的更多详细信息,请单击
  • 二,。添加空检查,如下所示:-

        ....
    Window2 ww = null; // static or instence variable
    ......
    @Override
    public void actionPerformed(ActionEvent e) {
    if(ww==null)
    {
         ww = new Window2(); 
         ww.someMethod();
    
    }
    else
    {
       ww.someMethod();
    
    }
    
    }
    });

    actionPerformed
    方法中拉出ojbect创建,因为每次单击按钮时,它都是“创建新对象”。以下内容可以帮助您:-

  • 制作Window2类singalton,了解有关singalton的更多详细信息,请单击
  • 二,。添加空检查,如下所示:-

        ....
    Window2 ww = null; // static or instence variable
    ......
    @Override
    public void actionPerformed(ActionEvent e) {
    if(ww==null)
    {
         ww = new Window2(); 
         ww.someMethod();
    
    }
    else
    {
       ww.someMethod();
    
    }
    
    }
    });

    actionPerformed
    方法中拉出ojbect创建,因为每次单击按钮时,它都是“创建新对象”。以下内容可以帮助您:-

  • 制作Window2类singalton,了解有关singalton的更多详细信息,请单击
  • 二,。添加空检查,如下所示:-

        ....
    Window2 ww = null; // static or instence variable
    ......
    @Override
    public void actionPerformed(ActionEvent e) {
    if(ww==null)
    {
         ww = new Window2(); 
         ww.someMethod();
    
    }
    else
    {
       ww.someMethod();
    
    }
    
    }
    });

    actionPerformed
    方法中拉出ojbect创建,因为每次单击按钮时,它都是“创建新对象”。以下内容可以帮助您:-

  • 制作Window2类singalton,了解有关singalton的更多详细信息,请单击
  • 二,。添加空检查,如下所示:-

        ....
    Window2 ww = null; // static or instence variable
    ......
    @Override
    public void actionPerformed(ActionEvent e) {
    if(ww==null)
    {
         ww = new Window2(); 
         ww.someMethod();
    
    }
    else
    {
       ww.someMethod();
    
    }
    
    }
    });

    您必须将Window2对象存储在MainWindow类中,在执行操作时创建/显示/放置在前台“我已经浏览了有关如何只打开一个窗口的主题…”“这些主题的链接是什么?”Window2类也在扩展JFrame,…“不扩展frame,并且永远不会有两个。”。请参阅注意,如果第二个“窗口”实际上是一个模态的
    JDialog
    ,则用户不可能同时打开它两次。您必须将Window2对象存储在MainWindow类中,在执行操作时创建/显示/放在前台“我已浏览了有关如何仅打开一个窗口的主题…”这些主题的链接是什么?“Window2类也在扩展JFrame,…”不要扩展frame,并且永远不要有两个。请参阅注意,如果第二个“窗口”实际上是一个模态的
    JDialog
    ,则用户不可能同时打开它两次。您必须将Window2对象存储在MainWindow类中,在执行操作时创建/显示/放在前台“我已浏览了有关如何仅打开一个窗口的主题…”这些主题的链接是什么?“Window2类也在扩展JFrame,…”不要扩展frame,并且永远不要有两个。请参阅注意,如果第二个“窗口”实际上是一个模态的
    JDialog
    ,则用户不可能同时打开它两次。您必须将Window2对象存储在MainWindow类中,在执行操作时创建/显示/放在前台“我已浏览了有关如何仅打开一个窗口的主题…”这些主题的链接是什么?“Window2类也在扩展JFrame,…”不要扩展frame,并且永远不要有两个。请参阅注意,如果第二个“窗口”实际上是模态的
    JDialog
    ,则用户不可能同时打开它两次。我已经用完全相同的if语句尝试了这一点,但我不知道如何使用else-ssstatement使其切换到打开的窗口。当我点击按钮时,它一直在打开新窗口,难道它不应该什么都不做吗?我已经用完全相同的if语句尝试过了,但我不知道如何修改else语句,以便它切换到打开的窗口。当我点击按钮时,它一直在打开新窗口,难道它不应该什么都不做吗?我已经用完全相同的if语句尝试过了,但我不知道如何修改else语句,以便它切换到打开的窗口。当我点击按钮时,它一直在打开新窗口,难道它不应该什么都不做吗?我已经用完全相同的if语句尝试过了,但我不知道如何修改else语句,以便它切换到打开的窗口。当我点击按钮时,它一直在打开新窗口,难道它不应该什么都不做吗?我已经用完全相同的if语句尝试过了,但我不知道该怎么处理else语句,以便