Swing/WindowClosingAction のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/WindowClosingAction へ行く。
- title: JPopupMenuなどからWindowを閉じる tags: [JFrame, JPopupMenu, JToolBar, JMenuBar] author: aterai pubdate: 2013-03-11T17:04:49+09:00 description: JPopupMenuや、JToolBarなどに親Windowを閉じるためのActionを作成します。
概要
JPopupMenu
や、JToolBar
などに親Window
を閉じるためのAction
を作成します。
Screenshot
Advertisement
サンプルコード
private static 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));
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、親となるJFrame
を取得し、window.dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING));
を
使って、終了イベントを実行しています。
JPopupMenu
JPopupMenu#getInvoker()
を使って、JComponent#setComponentPopupMenu(popup)
で設定したコンポーネントを取得し、SwingUtilities.getWindowAncestor(...)
で、親Window
を取得
JMenuBar
SwingUtilities.getWindowAncestor(...)
で、自身の親Window
を取得
JToolBar
- 移動中の場合、
JComponent#setComponentPopupMenu(toolbar)
で取得した移動中のWindow
の親Window
をWindow#getOwner()
で取得 - 移動中では無い場合、
SwingUtilities.getWindowAncestor(toolbar)
で、自身の親Window
を取得
- 移動中の場合、