Swing/CenterOneTouchButtons のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CenterOneTouchButtons へ行く。
- 1 (2022-08-08 (月) 02:09:53)
- 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
概要
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
は表示されない?