swing中,如何用点击按钮关闭窗口?不能用System.exit(0)或System.exit(1)

guijava 2009-07-22 04:26:40
我想用这个JFrame.dispose(); 我是在修改别人的代码,我找不到JFrame在那儿,别人用的是extends JPanel,通过JPanel,能得到它所在的JFrame吗?JPanel.getParent()得到的是Container,我不知道该怎么用。
我想放个按钮,点击按钮关闭窗口

例如下面的代码:
import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;

public class MyPanel extends JPanel {

public MyPanel(){

JButton btn = new JButton("关闭窗口");
btn.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
//我想关闭窗口,应该怎么写?不要用System.exit(0);或System.exit(1);

}
});
this.add(btn);
}

public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new MyPanel());
f.setSize(400,300);
f.setVisible(true);
}
}
...全文
1677 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
leblang 2009-07-23
  • 打赏
  • 举报
回复
public class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;

public MyPanel(){

JButton btn = new JButton("关闭窗口");
btn.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
//我想关闭窗口,应该怎么写?不要用System.exit(0);或System.exit(1);
Component cmp= e.getComponent();
while(!(cmp instanceof JFrame ) || cmp.getParent() !=null ){
cmp = cmp.getParent();
}
((JFrame)cmp).dispose();
}
});
this.add(btn);
}

public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new MyPanel());
f.setSize(400,300);
f.setVisible(true);
}
}
lasfrost 2009-07-23
  • 打赏
  • 举报
回复
要找JFrame这样:


Container c = getParent();
while (!c instanceof JFrame) {
c = c.getParent();
}
jjqxt 2009-07-22
  • 打赏
  • 举报
回复
2樓試驗無誤。。。。放心使用
工布之者 2009-07-22
  • 打赏
  • 举报
回复
可以吗?
guijava 2009-07-22
  • 打赏
  • 举报
回复
5555555555555555555555
guijava 2009-07-22
  • 打赏
  • 举报
回复
我找不到JFrame..........
mr-yin 2009-07-22
  • 打赏
  • 举报
回复
dispose
public void dispose()释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。
通过随后对 pack 或 show 的调用重新构造本机资源,可以再次显示 Window 及其子组件。重新创建的 Window 及其子组件的状态在移除 Window 的点上与这些对象的状态将是一样的(不考虑这些操作之间的其他更改)。

注:当 Java 虚拟机 (VM) 中最后的可显示窗口被移除后,虚拟机可能会终止。有关更多信息,请参阅 AWT Threading Issues。


closewbq 2009-07-22
  • 打赏
  • 举报
回复

public class MyPanel extends JPanel {

private static JFrame f;
public MyPanel(){

JButton btn = new JButton("关闭窗口");
btn.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
//我想关闭窗口,应该怎么写?不要用System.exit(0);或System.exit(1);
f.dispose();
}
});
this.add(btn);
}

public static void main(String[] args) {
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new MyPanel());
f.setSize(400,300);
f.setVisible(true);
}
}

62,614

社区成员

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

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