获取顶层窗口:
public void actionPerformed(ActionEvent e) { JComponent comp = (JComponent) e.getSource(); Window win = SwingUtilities.getWindowAncestor(comp); win.dispose();}确保已将Jframe的默认关闭操作设置为
Jframe.DISPOSE_ON_CLOSE(首选)或
Jframe.EXIT_ON_CLOSE(首选)。
如果有可能会从JMenuItem调用此方法,那么除非您首先测试组件的父级是JPopupMenu还是JToolBar,否则它将不起作用。如果是这样,那么您应该使用更健壮的解决方案,例如可以在java-
swing-tips上找到,特别是以下代码:
class ExitAction extends AbstractAction { public ExitAction() { super("Exit"); } @Override public void actionPerformed(ActionEvent e) { JComponent c = (JComponent) e.getSource(); Window window = null; Container parent = c.getParent(); if (parent instanceof JPopupMenu) { JPopupMenu popup = (JPopupMenu) parent; JComponent invoker = (JComponent) popup.getInvoker(); window = SwingUtilities.getWindowAncestor(invoker); } else if (parent instanceof JToolBar) { JToolBar toolbar = (JToolBar) parent; if (((BasicToolBarUI) toolbar.getUI()).isFloating()) { window = SwingUtilities.getWindowAncestor(toolbar).getOwner(); } else { window = SwingUtilities.getWindowAncestor(toolbar); } } else { Component invoker = c.getParent(); window = SwingUtilities.getWindowAncestor(invoker); } if (window != null) { //window.dispose(); window.dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING)); } }}来源:WindowClosingAction



