我查看了有关如何在单击按钮时只打开一个窗口的主题,但没有任何解决方案有帮助,可能是因为我的代码结构有点不同。
所以我有一个扩展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。
谢谢
答案 0 :(得分:2)
从actionPerformed
方法中提取ojbect创建,因为每次单击按钮时都会创建新对象。以下可以帮助您: -
2。添加null检查如下: -
....
Window2 ww = null; // static or instence variable
......
@Override
public void actionPerformed(ActionEvent e) {
if(ww==null)
{
ww = new Window2();
ww.someMethod();
}
else
{
ww.someMethod();
}
} });
答案 1 :(得分:1)
以下是一个完整的工作示例:
<强> Window2.java 强>
public class Window2 extends JFrame {
private static final long serialVersionUID = 7843480295403205677L;
}
<强> MainWindow.java 强>
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);
}
}
答案 2 :(得分:0)
你可以尝试制作两个窗口并将actionPerformed方法放在主类中,这样当按下按钮时它会显示第二个窗口