TITLE:DesktopManagerでアイコンの再配置

DesktopManagerでアイコンの再配置

編集者:Terai Atsuhiro
作成日:2007-01-15
更新日:2023-06-09 (金) 11:16:24

概要

JDesktopPaneのサイズが変更されたとき、アイコン化しているJInternalFrameの再配置を行います。Bug ID: 4765256 REGRESSION: Icons in JDesktopPane not repositioned when pane is resizedからソースコードの大部分を引用しています。

#screenshot

サンプルコード

class ReIconifyDesktopManager extends DefaultDesktopManager {
  public void reIconifyFrame(JInternalFrame jif) {
    deiconifyFrame(jif);
    Rectangle r = getBoundsForIconOf(jif);
    iconifyFrame(jif);
    jif.getDesktopIcon().setBounds(r);
  }
}
//......
ReIconifyDesktopManager rdm = new ReIconifyDesktopManager();
desktop.setDesktopManager(rdm);
desktop.addComponentListener(new ComponentAdapter() {
  public void componentResized(ComponentEvent ce) {
    JDesktopPane dp = (JDesktopPane)ce.getComponent();
    ReIconifyDesktopManager dm = (ReIconifyDesktopManager)dp.getDesktopManager();
    JInternalFrame[] jif = dp.getAllFrames();
    for(int i=0;i<jif.length;i++) {
      if(jif[i].isIcon()) dm.reIconifyFrame(jif[i]);
    }
  }
});
//......
  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルでは、JToggleButtonが選択されている場合、再配置を行っています。

JDesktopPaneがリサイズされた場合、以下のような手順で再配置を行っています。

  • アイコン化したJInternalFrame を一旦、元のサイズと位置に復元
  • アイコン化した場合の位置を再計算
  • 再びアイコン化
  • 再計算した位置への移動

参考リンク

コメント