gpt4 book ai didi

java - 在 actionPerformed 方法中重构 JFrame

转载 作者:行者123 更新时间:2023-11-29 05:27:26 25 4
gpt4 key购买 nike

所以我目前有一个程序有 2 个扩展 JFrame 的窗口。

主窗口有一个打开新窗口(窗口 2)的按钮。 Window2 有自己定义的带有小部件和监听器的类。目前,如果我在主框架中多次按下按钮,而第二个窗口仍处于打开状态,那么它将切换到该窗口,而不会创建一个新窗口(这正是我想要的)。

第二个窗口还有一些小部件、一个搜索字段和一个根据用户在 JTextField 中键入的内容填充的表格。问题是,一旦我关闭 Window2 并按下主窗口中的按钮重新打开它,就会出现相同的窗口,其中包含先前在搜索字段中输入的文本和填充的表格。

问题是,我想做到这样,一旦 Window2 关闭并重新打开,我就会创建一个带有空搜索字段的全新 Window2 实例和表。我认为这可以与 JFrame.DISPOSE_ON_CLOSE 一起使用,但事实并非如此。

我的一些代码可能会更好地解释这一点:

public class MainWindow extends JFrame{

/*
* create widgets and panels in Main window
*/
private Window2 ww = null;
Button.addActionListener(new ActionListener() { // the button that opens
//a new window

@Override
public void actionPerformed(ActionEvent e) {
if (ww==null) { //creating the new window here
ww = new Window2();
ww.setTitle("Window2");
ww.setSize(600, 400);

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


/*
* Window 2
*/

public class Window2 extends JFrame {

//add widgets and listeners

pack();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}

最佳答案

有很多方法可以实现这一点,最简单的方法是检查窗口是否可见,例如...

public void actionPerformed(ActionEvent e) {
if (ww==null || !ww.isVisible()) {
ww = new Window2();
ww.setTitle("Window2");
// You should be using pack
ww.setSize(600, 400);
}
ww.setVisible(true);
}

现在,话虽如此,通常不鼓励以这种方式使用多个框架,因为这会让用户感到困惑,尤其是当他们可能已经打开了多个窗口来做其他事情时,其他框架可能会“丢失”。

您应该考虑使用模态对话框,强制用户使用对话框完成工作并在完成后将其关闭。这将阻止用户与父窗口交互,直到对话框关闭或使用 CardLayout。或 JTabbedPane ,允许您根据需要在 View 之间切换。

关于java - 在 actionPerformed 方法中重构 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com