在swing编程中,运用JInternalFrame,那如何在关掉内部窗体的同时把外部窗体关掉?
内部窗体跟外部窗体的关系是:内部窗体internalFrame是在外部窗体的desktopPane中...
内部窗体跟外部窗体的关系是:内部窗体internalFrame是在外部窗体的desktopPane中
展开
展开全部
关闭内部窗体时会触发 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);//创建窗口并设置可见
}
});
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询