---
category: swing
folder: CloseInternalFrame
title: JInternalFrameを閉じる
tags: [JInternalFrame, JDesktopPane, DesktopManager]
author: aterai
pubdate: 2008-05-05T20:51:51+09:00
description: 選択中のJInternalFrameをDesktopManagerなどを使用して外部から閉じる(JDesktopPaneから除去する)方法をテストします。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJcTXtdNI/AAAAAAAAAUY/zL_wkJJa_Ks/s800/CloseInternalFrame.png
---
* 概要 [#summary]
選択中の`JInternalFrame`を`DesktopManager`などを使用して外部から閉じる(`JDesktopPane`から除去する)方法をテストします。

#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJcTXtdNI/AAAAAAAAAUY/zL_wkJJa_Ks/s800/CloseInternalFrame.png)

* サンプルコード [#sourcecode]
#code(link){{
closeSelectedFrameAction1 = new AbstractAction() {
  @Override public void actionPerformed(ActionEvent e) {
    JInternalFrame f = desktop.getSelectedFrame();
    if (f != null) {
      desktop.getDesktopManager().closeFrame(f);
    }
  }
};

closeSelectedFrameAction2 = new AbstractAction() {
  @Override public void actionPerformed(ActionEvent e) {
    JInternalFrame f = desktop.getSelectedFrame();
    if (f != null) {
      f.doDefaultCloseAction();
    }
  }
};

closeSelectedFrameAction3 = new AbstractAction() {
  @Override public void actionPerformed(ActionEvent e) {
    try {
      JInternalFrame f = desktop.getSelectedFrame();
      if (f != null) {
        f.setClosed(true);
      }
    } catch (PropertyVetoException ex) {
      ex.printStackTrace();
    }
  }
};

disposeSelectedFrameAction = new AbstractAction() {
  @Override public void actionPerformed(ActionEvent e) {
    JInternalFrame f = desktop.getSelectedFrame();
    if (f != null) {
      f.dispose();
    }
  }
};
}}

* 解説 [#explanation]
上記のサンプルでは、選択されている`JInternalFrame`をツールバーのボタンやKBD{Esc}キー(`OS`が`Windows`の場合のデフォルトはKBD{Ctrl+F4})で閉じることができます。

- `RED`
-- `JInternalFrame#dispose()`メソッドを使用
-- 閉じた後、他のフレームに選択状態が移動しない
- `GREEN`
-- `DesktopManager#closeFrame(JInternalFrame)`メソッドを使用
- `BLUE`
-- `JInternalFrame#doDefaultCloseAction()`メソッドを使用
- `YELLOW`
-- `JInternalFrame#setClosed(true)`メソッドを使用

----
- `JDK 1.5` + `WindowsLookAndFeel`では`JInternalFrame`を閉じたときアイコン化されている`JInternalFrame`には選択状態は移動しない

* 参考リンク [#reference]
- [http://mail.openjdk.java.net/pipermail/swing-dev/2013-April/002688.html <Swing Dev> 8 Review request for 8012004: JINTERNALFRAME NOT BEING FINALIZED AFTER CLOSING]
- [https://mail.openjdk.org/pipermail/swing-dev/2013-April/002688.html <Swing Dev> 8 Review request for 8012004: JINTERNALFRAME NOT BEING FINALIZED AFTER CLOSING]
- [https://bugs.openjdk.org/browse/JDK-4759312 JDK-4759312 JInternalFrame Not Being Finalized After Closing - Java Bug System]

* コメント [#comment]
#comment
#comment