JSplitPaneの展開・収納ボタンをDividerサイズの中央に配置する
Total: 947
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JSplitPane
をすばやく展開/収納するためのJButton
がDivider
サイズの中央に配置されるよう設定します。
Screenshot
Advertisement
サンプルコード
JSplitPane splitPane = new JSplitPane();
splitPane.setTopComponent(new JScrollPane(new JTable(8, 3)));
splitPane.setBottomComponent(new JScrollPane(new JTree()));
splitPane.setOneTouchExpandable(true);
splitPane.setDividerSize(32);
String key = "SplitPane.centerOneTouchButtons";
JCheckBox check = new JCheckBox(key, UIManager.getBoolean(key)) {
@Override public void updateUI() {
super.updateUI();
EventQueue.invokeLater(() -> {
boolean b = UIManager.getLookAndFeelDefaults().getBoolean(key);
setSelected(b);
UIManager.put(key, b);
SwingUtilities.updateComponentTreeUI(splitPane);
});
}
};
check.setOpaque(false);
check.addActionListener(e -> {
JCheckBox cb = (JCheckBox) e.getSource();
UIManager.put(key, cb.isSelected());
SwingUtilities.updateComponentTreeUI(splitPane);
});
View in GitHub: Java, Kotlin解説
上記のサンプルではJSplitPane#setOneTouchExpandable(true)
でOneTouchButton
をDivider
内に表示するよう設定し、その配置位置をUIManager.put("SplitPane.centerOneTouchButtons", Boolean)
で中央か左端(水平分割の場合)かを変更するテストを実施しています。
Divider
中央- 水平分割
JSplitPane
の場合はDivider
の幅の中央 - 垂直分割
JSplitPane
の場合はDivider
の高さの中央 - このため
JSplitPane#setDividerSize(...)
などで設定されるDivider
サイズがOneTouchButton
アイコンのサイズと等しい場合、この設定は無意味になる
- 水平分割
LookAndFeel
依存NimbusLookAndFeel
ではこの設定は無効で常に中央揃えになる- その他
BasicLookAndFeel
、MetalLookAndFeel
、WindowsLookAndFeel
などの初期値はfalse
で、設定変更後にSwingUtilities.updateComponentTreeUI(splitPane)
などでUI
を更新すると表示に反映される GTKLookAndFeel
ではJSplitPane#setOneTouchExpandable(true)
を設定してもOneTouchButton
は表示されない?