在swing编程中,运用JInternalFrame,那如何在关掉内部窗体的同时把外部窗体关掉?

内部窗体跟外部窗体的关系是:内部窗体internalFrame是在外部窗体的desktopPane中... 内部窗体跟外部窗体的关系是:内部窗体internalFrame是在外部窗体的desktopPane中 展开
 我来答
雪飞潇潇
2019-03-04 · TA获得超过6275个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:868万
展开全部

关闭内部窗体时会触发 InternalFrameEvent 事件. 我们添加Listener对其进行响应即可

internalFrame.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameClosing(InternalFrameEvent e) { //当内部窗体关闭时,会执行下面的代码
//1.最简单的方式就是:彻底关闭退出,但如果还有其他窗口,那么也会关闭其它窗口
// System.exit(0);

//2.仅关闭当前内部窗口,和所在的外部窗体
Window win = SwingUtilities.getWindowAncestor(desktopPane);//获取指定组件的外部窗体
win.setVisible(false);//设置不可见
win.dispose();//销毁
}
});

完整的参考代码

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class ParentFrame extends JFrame{

public ParentFrame() {
JDesktopPane desktopPane  = new JDesktopPane();
JInternalFrame internalFrame = new JInternalFrame("内部窗体");
internalFrame.setClosable(true);//注意一定要在构造internalFrame指定可以关闭,或者直接设置internalFrame可以关闭
internalFrame.setSize(180, 120);
internalFrame.setLocation(50, 60);
internalFrame.setVisible(true);
desktopPane.add(internalFrame);

add(desktopPane);
setTitle("外部窗体");
setSize(450, 380);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);



//关键代码
internalFrame.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameClosing(InternalFrameEvent e) {
//1.最简单的方式就是:彻底关闭退出,但如果还有其他窗口,那么也会关闭其它窗口
// System.exit(0);

//2.仅关闭当前内部窗口,和所在的外部窗体
Window win = SwingUtilities.getWindowAncestor(desktopPane);//获取指定窗口的外部窗体
win.setVisible(false);//设置不可见
win.dispose();//销毁
}
});
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ParentFrame().setVisible(true);//创建窗口并设置可见
}
});
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式