java JFrame关闭窗口

zhiweibo 2009-06-01 04:03:07
今天碰到一个很奇怪的问题,我想在关闭一个窗口的时候,弹出一个对话框,如果选择是的时候 ,关闭窗口,而选否的时候,没有任何反应,我做了以下的代码,可是就是不行的,我用了Frame的话,是可以的。
哪位大侠可以帮我解决一下,为什么会出现这种问题,再给我说一下,JFrame下怎么解决这个问题的。
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FrameTest {

public static void main(String[] args) {
JFrame frame=new JFrame("test");
frame.setSize(500,400);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent arg0) {
// return;
if (JOptionPane.showConfirmDialog((JFrame)arg0.getSource(), "你确定退出程序嘛?",
"Exit Confirm", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) ==
JOptionPane.YES_OPTION) {
System.out.println("exit program");
System.exit(0);
}
}
});
}
}
...全文
672 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu2007chzu 2011-09-08
  • 打赏
  • 举报
回复
唉,都是大虾!!!
右领军大都督 2011-09-08
  • 打赏
  • 举报
回复
code修改如下:

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FrameTest {

public static void main(String[] args) {
JFrame frame = new JFrame("test");
frame.setSize(500, 400);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0) {
if (JOptionPane.showConfirmDialog((JFrame) arg0.getSource(),
"你确定退出程序嘛?", "Exit Confirm", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
System.out.println("exit program");
System.exit(0);
}
}
});
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
}
小恩yoo 2011-09-08
  • 打赏
  • 举报
回复
都很棒啊、、、学习学习
zbajie 2009-09-25
  • 打赏
  • 举报
回复
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

加BUTTON
actionPerformed 中调用

dispose()
littlemonster 2009-09-25
  • 打赏
  • 举报
回复
顶~

[Quote=引用 4 楼 zbajie 的回复:]
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

加BUTTON
actionPerformed 中调用

dispose()
[/Quote]
amdgaming 2009-09-25
  • 打赏
  • 举报
回复
强 呵呵
virginkj 2009-09-25
  • 打赏
  • 举报
回复

public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MainFrm thisClass = new MainFrm();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
virginkj 2009-09-25
  • 打赏
  • 举报
回复

protected void processWindowEvent(WindowEvent e){
if(e.getID() == WindowEvent.WINDOW_CLOSING)
{
int value = JOptionPane.showConfirmDialog(null,"是否退出系统?","退出系统",JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
if(value == JOptionPane.OK_OPTION)
{
CloseSystem();
System.exit(0);
}
}
else
{
super.processWindowEvent(e);
}
}
dichyzhu 2009-09-25
  • 打赏
  • 举报
回复
试下这个,把JFrame frame=new JFrame("test")改为final JFrame frame = new JFrame("test"),替换掉(JFrame)arg0.getSource().

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FrameTest {
public static void main(String[] args) {
final JFrame frame = new JFrame("test");
frame.setSize(500, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0) {
if (JOptionPane.showConfirmDialog(frame,
"你确定退出程序嘛?",
"Exit Confirm",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
System.out.println("exit program");
System.exit(0);
}
}
});
}
}
sforiz 2009-09-25
  • 打赏
  • 举报
回复
没有进行完全的事件处理
swandragon 2009-06-01
  • 打赏
  • 举报
回复
还会出现这种情况
学习了
GeekZFZ 2009-06-01
  • 打赏
  • 举报
回复
学习
gentalguo 2009-06-01
  • 打赏
  • 举报
回复
呵呵~~看见别人遭受我当年的困扰~~这种感觉……
恩,当时我采用了一种回避的方法。是这样。
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
点击关闭按钮,什么都不做。
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int rs = JOptionPane.showConfirmDialog(frame,
"Are you sure you want to quit", "",
JOptionPane.OK_CANCEL_OPTION);
if (rs == JOptionPane.OK_OPTION) {
frame.setVisible(false);
frame.dispose();
System.exit(0);
} else if (rs == JOptionPane.CANCEL_OPTION) {
return;
}
}
});
它的关闭与否由监听控制。我感觉这应该不是最好的方法。但当时迫于无奈,也只好这样了。
也许……很快会有人告诉我更好的做法吧。
拿去顶着先~~记得frame需要final修饰。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧