Swing/RelocatedIcon のバックアップ(No.19)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
- category: swing folder: RelocatedIcon title: DesktopManagerでアイコンの再配置 tags: [DesktopManager, JDesktopPane, JInternalFrame] author: aterai pubdate: 2007-01-15T12:27:58+09:00 description: JDesktopPaneのサイズが変更されたとき、アイコン化しているJInternalFrameの再配置を行います。 image:
概要
JDesktopPane
のサイズが変更されたとき、アイコン化しているJInternalFrame
の再配置を行います。[JDK-4765256] REGRESSION: Icons in JDesktopPane not repositioned when pane is resized - Java Bug Systemからソースコードの大部分を引用しています。
Screenshot
Advertisement
サンプルコード
class ReIconifyDesktopManager extends DefaultDesktopManager {
public void reIconifyFrame(JInternalFrame jif) {
deiconifyFrame(jif);
Rectangle r = getBoundsForIconOf(jif);
iconifyFrame(jif);
jif.getDesktopIcon().setBounds(r);
}
}
private 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);
}
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JDesktopPane
がリサイズされた場合、以下のような手順で再配置を行っています。
- アイコン化した
JInternalFrame
を一旦元のサイズと位置に復元 - アイコン化した場合の位置を再計算
- 再びアイコン化
- 再計算した位置への移動
GTKLookAndFeel
を使用する場合、アイコンの移動自体がデフォルトでは不可なのでこの設定は無意味になる
参考リンク
- [JDK-4765256] REGRESSION: Icons in JDesktopPane not repositioned when pane is resized - Java Bug System
- [JDK-4110799] JInternalFrame icon position unchanged w/ resize - Java Bug System