gpt4 book ai didi

java - 当用户尝试关闭窗口按钮时,如何检查文件是否已保存?

转载 作者:行者123 更新时间:2023-11-29 05:33:34 24 4
gpt4 key购买 nike

我有几个类(class),但我只发布我有的主要类(class)。这段代码的大部分来 self 教授的示例程序。我的问题是我想在窗口按钮关闭后运行检查。 “检查”将查看从另一个类“保存”的 boolean 变量是真还是假,并据此采取行动。然后,关闭窗口。到目前为止我有这个,但我从 JFrameL 收到错误。如何使用另一个类的 WindowClosing 方法?我看到我不应该自己调用它?

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class Main {

public static JFrameL frame;

public static void main(String[] args) {
// Create a window.
frame = new JFrameL("Checking Account Actions");

// Set the size of the window.
frame.setSize(450, 350);
frame.setAlwaysOnTop(true);

// Specify what happens when the close button is clicked.
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

CheckingAccountActions panel = new CheckingAccountActions();
frame.getContentPane().add(panel);
frame.pack();

// Display the window
frame.setVisible(true);

}

public class JFrameL extends JFrame {

public JFrameL(String title) {
super(title);
FrameListener listener = new FrameListener();
addWindowListener(listener);
}

private class FrameListener extends WindowAdapter {

public void windowClosing(WindowEvent e) {
System.out.println("WindowListener method called: windowClosed.");
if(!CheckingAccountActions.saved) {
String message = "The data in the application is not saved.\n"
+ "Would you like to save it before exiting the application?";
int confirm = JOptionPane.showConfirmDialog (null, message);

if (confirm == JOptionPane.YES_OPTION)
CheckingAccountActions.chooseFile(2);
}
Main.frame.setVisible(false);
System.exit(0);
}
}
}

}

我在第 2 行收到来自 main() 的错误消息:

“无法访问 Main 类型的封闭实例。必须使用 Main 类型的封闭实例限定分配(例如 x.new A(),其中 x 是 Main 的实例)。”

最佳答案

  1. 您似乎试图以静态方式调用实例方法。不要这样做。
  2. 我不会为您想要做的事情扩展 JFrame。
  3. 我会创建自己的 WindowListener 类,该类具有对对象的有效引用,该对象知道是否需要保存文件以及是否已完成保存。

例如,

class MyWindowAdapter extends WindowAdapter {
private CheckingAccountActions checkActions;

public MyWindowAdapter(CheckingAccountActions checkActions) {
this.checkActions = checkActions;
}

// in your window closing method
// check the state of checkActions first before doing anything
public void windowClosing(WindowEvent e) {
// note -- don't check for saved in a static way
// use a method on the instance.
if(!checkActions.getSaved()) {
// etc...
}

JFrame frame = (JFrame)e.getSource();
frame.setVisible(false);

// Main.frame.setVisible(false);
System.exit(0);
}
}

然后在主要部分:

public static void main(String[] args) {
frame = new JFrame("Checking Account Actions");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

CheckingAccountActions panel = new CheckingAccountActions();

MyWindowAdapter winAdapter = new MyWindowAdapter(panel);
frame.addWindowListener(winAdapter);

frame.getContentPane().add(panel);
frame.pack();

frame.setVisible(true);
}

编辑

这有点静态过度使用的味道:CheckingAccountActions.saved

关于java - 当用户尝试关闭窗口按钮时,如何检查文件是否已保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277053/

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