概要

JInternalFrameの上部に配置されるタイトルバーの高さを変更します

サンプルコード

// InternalFrame.titleFont
// InternalFrame.titleButtonHeight
// InternalFrame.titleButtonWidth
// InternalFrame.titlePaneHeight
String key = "InternalFrame.titlePaneHeight";
int height = UIManager.getLookAndFeelDefaults().getInt(key);
SpinnerNumberModel model = new SpinnerNumberModel(height, 0, 50, 1);
model.addChangeListener(e -> {
  int v = model.getNumber().intValue();
  UIManager.put(key, v);
  // UIManager.put("InternalFrame.titleButtonWidth", v);
  // UIManager.put("InternalFrame.titleButtonHeight", v);
  SwingUtilities.updateComponentTreeUI(desktop);
});
JSpinner spinner = new JSpinner(model) {
  @Override public void updateUI() {
    super.updateUI();
    int h = UIManager.getLookAndFeelDefaults().getInt(key);
    UIManager.put(key, h);
    model.setValue(h);
    SwingUtilities.updateComponentTreeUI(desktop);
  }
};
View in GitHub: Java, Kotlin

解説

  • WindowsLookAndFeelでのみUIManager.put("InternalFrame.titlePaneHeight", 22)JInternalFrameTitlePaneの高さを変更可能
    • 左端のSystemMenuアイコンはタイトルバーの高さに応じて拡大縮小するが、閉じるアイコンなどのサイズは自動的に変化しない
    • UIManager.put("InternalFrame.titleButtonHeight", ...)などで更新する必要がある
  • JComponent titleBar = ( (BasicInternalFrameUI) frame.getUI() ).getNorthPane()で個別のTitlePaneを取得しtitleBar.setPreferredSize(...)でサイズ変更しても効果がない

参考リンク

コメント