Swing/CenterOneTouchButtons のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CenterOneTouchButtons へ行く。
- category: swing folder: CenterOneTouchButtons title: JSplitPaneの展開・収納ボタンをDividerサイズの中央に配置する tags: [JSplitPane, UIManager] author: aterai pubdate: 2022-08-08T02:07:09+09:00 description: JSplitPaneをすばやく展開/収納するためのJButtonがDividerサイズの中央に配置されるよう設定します。 image: https://drive.google.com/uc?id=1csOObqMc4lv3Xr4RDwhPjPeb7sMFomEa
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は表示されない?