DesktopManagerでアイコンの再配置
Total: 7893
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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
がリサイズされた場合、以下のような手順で再配置を実行GTKLookAndFeel
を使用する場合、アイコンの移動自体がデフォルトでは不可なのでこの設定は無意味になる
- アイコン化した
JInternalFrame
を一旦元のサイズと位置に復元 - アイコン化した場合の位置を再計算
- 再びアイコン化
- 再計算した位置への移動
参考リンク
- [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