Swing/DesktopIconSize のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DesktopIconSize へ行く。
- 1 (2016-02-15 (月) 00:03:35)
- 2 (2017-04-07 (金) 13:51:51)
- 3 (2017-07-06 (木) 13:54:53)
- 4 (2017-08-03 (木) 13:15:38)
- 5 (2017-08-03 (木) 15:37:21)
- 6 (2017-08-04 (金) 15:50:59)
- 7 (2017-08-21 (月) 21:25:29)
- 8 (2018-08-30 (木) 14:48:42)
- 9 (2019-05-22 (水) 19:35:38)
- 10 (2020-08-25 (火) 15:56:46)
- 11 (2022-02-01 (火) 22:41:03)
- 12 (2022-08-20 (土) 22:15:25)
- category: swing folder: DesktopIconSize title: JInternalFrameをアイコン化した場合のサイズを変更する tags: [JInternalFrame, JDesktopPane, LookAndFeel, JDesktopIcon] author: aterai pubdate: 2016-02-15T00:00:57+09:00 description: JInternalFrameをアイコン化したときに使用されるJDesktopIconのサイズを変更します。 image:
概要
JInternalFrame
をアイコン化したときに使用されるJDesktopIcon
のサイズを変更します。
Screenshot
Advertisement
サンプルコード
UIManager.put("DesktopIcon.width", 150);
// ...
JInternalFrame f = new JInternalFrame(t, true, true, true, true);
f.setDesktopIcon(new JInternalFrame.JDesktopIcon(f) {
@Override public Dimension getPreferredSize() {
return new Dimension(150, 40);
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JInternalFrame
をアイコン化したときに使用されるJDesktopIcon
のサイズ変更をLookAndFeel
毎にテストしています。
UIManager.put("DesktopIcon.width", DESKTOPICON_WIDTH);
MetalLookAndFeel
、WindowsLookAndFeel
などでJDesktopIcon
の幅を指定可能NimbusLookAndFeel
、MotifLookAndFeel
では無効
Override: JInternalFrame.JDesktopIcon#getPreferredSize()
JInternalFrame.JDesktopIcon#getPreferredSize()
メソッドをオーバーライドしてLookAndFeel
に依存せずにサイズを変更MotifLookAndFeel
の場合、タイトルバー状ではなくアイコン状なのでnew Dimension(64, 64 + 32)
を使用
- デフォルト状態の
NimbusLookAndFeel
でJDesktopIcon
の高さがJInternalFrame
によって変化する?- 起動時からの
JInternalFrame
:height=33
、後でボタンから追加したJInternalFrame
:height=27
- JDK-7126823 JInternalFrame.getNormalBounds() returns bad value after iconify/deiconify - Java Bug System
- 起動時からの
DefaultDesktopManager#getBoundsForIconOf(...)
メソッドをオーバーライドしてサイズ変更することも可能だが、アイコンの位置を計算し直す必要があるdesktop.setDesktopManager(new DefaultDesktopManager() { @Override protected Rectangle getBoundsForIconOf(JInternalFrame f) { Rectangle r = super.getBoundsForIconOf(f); r.width = 200; return r; } });
DefaultDesktopManager#getBoundsForIconOf(...)
メソッドをオーバーライドする方法もあるdesktop.setDesktopManager(new DefaultDesktopManager() { @Override public void iconifyFrame(JInternalFrame f) { Rectangle r = this.getBoundsForIconOf(f); r.width = f.getDesktopIcon().getPreferredSize().width; f.getDesktopIcon().setBounds(r); super.iconifyFrame(f); } });
参考リンク
- java - Changing DesktopIcon.width on nimbus - Stack Overflow
- JInternalFrame.JDesktopIcon (Java Platform SE 8)
- JInternalFrameのタイトル文字列幅を取得し、その値でJDesktopIconの幅を調整する