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