Swing/CenterOneTouchButtons の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/CenterOneTouchButtons へ行く。
- 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`サイズの中央に配置されるよう設定します。 #download(https://drive.google.com/uc?id=1csOObqMc4lv3Xr4RDwhPjPeb7sMFomEa) * サンプルコード [#sourcecode] #code(link){{ 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); }); }} * 解説 [#explanation] 上記のサンプルでは`JSplitPane#setOneTouchExpandable(true)`で`OneTouchButton`を`Divider`内に表示するよう設定し、その配置位置を`UIManager.put("SplitPane.centerOneTouchButtons", Boolean)`で中央か左端(水平分割の場合)かを変更するテストを実施しています。 - `Divider`中央 -- 水平分割`JSplitPane`の場合は`Divider`の幅の中央 -- 垂直分割`JSplitPane`の場合は`Divider`の高さの中央 -- `JSplitPane#setDividerSize(...)`などで設定される`Divider`サイズが`OneTouchButton`アイコンのサイズと等しい場合、この設定は無意味になる -- このため`JSplitPane#setDividerSize(...)`などで設定される`Divider`サイズが`OneTouchButton`アイコンのサイズと等しい場合、この設定は無意味になる - `LookAndFeel`依存 -- `NimbusLookAndFeel`ではこの設定は無効で常に中央揃えになる -- その他`BasicLookAndFeel`、`MetalLookAndFeel`、`WindowsLookAndFeel`などの初期値は`false`で、設定変更後に`SwingUtilities.updateComponentTreeUI(splitPane)`などで`UI`を更新すると表示に反映される -- `GTKLookAndFeel`では`JSplitPane#setOneTouchExpandable(true)`を設定しても`OneTouchButton`は表示されない? * 参考リンク [#reference] - [[JSplitPaneのDividerを展開収納するOneTouchButtonのサイズ、色などを変更>Swing/OneTouchButton]] * コメント [#comment] #comment #comment