JInternalFrameのタイトルパネルをフレーム原点から描画する
Total: 749
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JInternalFrame
のタイトルパネルをフレーム原点から描画するかBorder
を考慮した配置にするかを切り替えます。
Screenshot
Advertisement
サンプルコード
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解説
BasicLookAndFeel
、MetalLookAndFeel
、MotifLookAndFeel
、NimbusLookAndFeel
のデフォルトはfalse
MetalLookAndFeel
でこの設定をtrue
にするとタイトルパネルがJInternalFrame
のBorder
を考慮せずに原点から幅全体が描画されて不自然なレイアウトのタイトルパネルになってしまうMotifLookAndFeel
でこの設定をtrue
にするとタイトルパネルがJInternalFrame
のBorder
を考慮せずに原点から幅全体を占めるようレイアウトされるNimbusLookAndFeel
でこの設定をtrue
にするとフレーム化されている場合は変化なしだが、アイコン化されている場合はその高さが変化する場合がある
WindowsLookAndFeel
、GTKLookAndFeel
のデフォルトはtrue
WindowsLookAndFeel
でこの設定をfalse
にするとタイトルパネルがJInternalFrame
のBorder
を考慮して縮小して描画されて不自然なレイアウトのタイトルパネルになってしまうGTKLookAndFeel
でこの設定をfalse
にするとタイトルパネルアイコンがタイトル文字列にかぶったり最大化、最小化、閉じるボタンがJInternalFrame
の内側に移動して不自然なレイアウトのタイトルパネルになってしまう
参考リンク
- BasicInternalFrameUI#getNorthPane() (Java Platform SE 8)
InternalFrame.layoutTitlePaneAtOrigin
の設定を考慮する必要があるのはタイトルパネル(NorthPane
)を自作する場合のみ?