概要

JInternalFrameのタイトルパネルをフレーム原点から描画するかBorderを考慮した配置にするかを切り替えます。

スクリーンショット

Swing/InternalFrameLayoutTitlePaneAtOrigin.png

サンプルコード

String key = "InternalFrame.layoutTitlePaneAtOrigin";
JDesktopPane desktop = new JDesktopPane();
boolean b = UIManager.getBoolean(key);
JCheckBox check = new JCheckBox("InternalFrame TitlePane layout", b) {
  @Override public void updateUI() {
    super.updateUI();
    boolean b = UIManager.getLookAndFeelDefaults().getBoolean(key);
    setSelected(b);
    UIManager.put(key, b);
    SwingUtilities.updateComponentTreeUI(desktop);
  }
};
check.addActionListener(e -> {
  UIManager.put(key, ((JCheckBox) e.getSource()).isSelected());
  SwingUtilities.updateComponentTreeUI(desktop);
});
check.setOpaque(false);

addFrame(desktop, 0, true);
addFrame(desktop, 1, false);
View in GitHub: Java, Kotlin

解説

  • BasicLookAndFeelMetalLookAndFeelMotifLookAndFeelNimbusLookAndFeelのデフォルトはfalse
    • MetalLookAndFeelでこの設定をtrueにするとタイトルパネルがJInternalFrameBorderを考慮せずに原点から幅全体が描画されて不自然なレイアウトのタイトルパネルになってしまう
    • MotifLookAndFeelでこの設定をtrueにするとタイトルパネルがJInternalFrameBorderを考慮せずに原点から幅全体を占めるようレイアウトされる
    • NimbusLookAndFeelでこの設定をtrueにするとフレーム化されている場合は変化なしだが、アイコン化されている場合はその高さが変化する場合がある
  • WindowsLookAndFeelGTKLookAndFeelのデフォルトはtrue
    • WindowsLookAndFeelでこの設定をfalseにするとタイトルパネルがJInternalFrameBorderを考慮して縮小して描画されて不自然なレイアウトのタイトルパネルになってしまう
    • GTKLookAndFeelでこの設定をfalseにするとタイトルパネルアイコンがタイトル文字列にかぶったり最大化、最小化、閉じるボタンがJInternalFrameの内側に移動して不自然なレイアウトのタイトルパネルになってしまう

参考リンク

コメント