您的位置:首页 > 其它

SWING 窗体关闭提示确认 的实现总结

2011-06-29 11:46 281 查看
今天要做SWING的窗体关闭保存确认,客户要求像WORD一样

首先,说SWING窗体关闭的实现,两种方法

1:在windowClosing事件进行处理

注意点:默认情况都是

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

这里要替换成setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

2:捕获窗口的相应事件进行处理(AWTEvent.WINDOW_EVENT_MASK)

此处通过捕获WINDOW_EVENT,判断如果是关闭事件,进行提示

直接上代码,以下为1.2整合之后的程序

import javax.swing.*;
import java.awt.AWTEvent;
import java.awt.event.*;
public class WindowTest {
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setVisible(true);
}
}
class TestFrame extends JFrame {
public TestFrame() {
setTitle("Test");
setSize(400, 400);

//1
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (JOptionPane.showConfirmDialog(null, "exit?") == JOptionPane.OK_OPTION)
System.exit(0);
}
});

//2
try {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
} catch (Exception e) {
}
}
protected void processWindowEvent(WindowEvent e) {
boolean enable = false;
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
int option = JOptionPane.showConfirmDialog(this, "exit?");
enable = (option == JOptionPane.NO_OPTION || option == JOptionPane.CANCEL_OPTION);
}
if (!enable) {
super.processWindowEvent(e);
}
}
}


大家可以看一下,实践证明,先是processWindowEvent捕获到了关闭操作,之后才是windowClosing事件

-------------------------------------

结合JAVA实践,业务功能实现过程大体过程如下:

1. 用户是否没有保存Flag:文档有变化,设为true / 新打开重新初始化 / 保存时重新初始化

2. 提示保存时,点OK的时候,要判断是否保存成功了,如果用户点了取消则不关闭窗体

参考资料:http://www.javanb.com/j2se/1/7942.html

http://topic.csdn.net/t/20051204/17/4437180.html

望大家指点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: