JSplitPaneの展開・収納ボタンをDividerサイズの中央に配置する
Total: 1442, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
JSplitPaneをすばやく展開/収納するためのJButtonがDividerサイズの中央に配置されるよう設定します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
上記のサンプルでは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は表示されない?