Swing/RelocatedIcon のバックアップ(No.13)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RelocatedIcon へ行く。
- 1 (2007-05-15 (火) 17:51:17)
- 2 (2007-11-01 (木) 13:59:23)
- 3 (2008-05-19 (月) 21:57:40)
- 4 (2008-05-20 (火) 16:36:16)
- 5 (2008-12-10 (水) 21:27:26)
- 6 (2011-10-04 (火) 16:58:32)
- 7 (2013-02-10 (日) 00:03:09)
- 8 (2013-08-20 (火) 14:38:21)
- 9 (2013-08-27 (火) 18:02:12)
- 10 (2014-11-01 (土) 00:46:09)
- 11 (2014-11-25 (火) 03:03:31)
- 12 (2015-01-21 (水) 18:37:10)
- 13 (2016-04-26 (火) 15:24:34)
- 14 (2016-09-15 (木) 16:34:44)
- 15 (2017-10-25 (水) 15:45:49)
- 16 (2017-11-02 (木) 15:34:40)
- 17 (2019-03-15 (金) 17:24:57)
- 18 (2020-12-24 (木) 12:05:39)
- 19 (2022-08-20 (土) 22:15:25)
- 20 (2023-06-09 (金) 11:16:24)
- title: DesktopManagerでアイコンの再配置 tags: [DesktopManager, JDesktopPane, JInternalFrame] author: aterai pubdate: 2007-01-15 description: JDesktopPaneのサイズが変更されたとき、アイコン化しているJInternalFrameの再配置を行います。
概要
JDesktopPane
のサイズが変更されたとき、アイコン化しているJInternalFrame
の再配置を行います。Bug ID: 4765256 REGRESSION: Icons in JDesktopPane not repositioned when pane is resizedからソースコードの大部分を引用しています。
Screenshot
Advertisement
サンプルコード
class ReIconifyDesktopManager extends DefaultDesktopManager {
public void reIconifyFrame(JInternalFrame jif) {
deiconifyFrame(jif);
Rectangle r = getBoundsForIconOf(jif);
iconifyFrame(jif);
jif.getDesktopIcon().setBounds(r);
}
}
View in GitHub: Java, Kotlinprivate void doReIconify(JDesktopPane desktopPane) {
DesktopManager dm = desktopPane.getDesktopManager();
if (dm instanceof ReIconifyDesktopManager) {
ReIconifyDesktopManager rdm = (ReIconifyDesktopManager) dm;
for (JInternalFrame f: desktopPane.getAllFrames()) {
if (f.isIcon()) {
rdm.reIconifyFrame(f);
}
}
}
}
解説
上記のサンプルでは、JDesktopPane
がリサイズされた場合、以下のような手順で再配置を行っています。
- アイコン化した
JInternalFrame
を一旦、元のサイズと位置に復元 - アイコン化した場合の位置を再計算
- 再びアイコン化
- 再計算した位置への移動
GTKLookAndFeel
の場合、アイコンを移動することは出来ないので、このサンプルには意味がありません。
参考リンク
- Bug ID: 4765256 REGRESSION: Icons in JDesktopPane not repositioned when pane is resized
- Bug ID: 4110799 JInternalFrame icon position unchanged w/ resize