Swing/DividerFocus のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DividerFocus へ行く。
- 1 (2020-05-11 (月) 18:31:16)
- 2 (2021-05-12 (水) 07:23:30)
- category: swing folder: DividerFocus title: JSplitPaneのDividerをマウスクリックで選択状態にする tags: [JSplitPane] author: aterai pubdate: 2020-05-11T17:50:27+09:00 description: JSplitPaneのDividerをマウスでクリックしたとき選択状態になるよう設定します。 image: https://drive.google.com/uc?id=1KMTrAVDblIUSfTjTvu0s_fBYMckaaF9Z
概要
JSplitPane
のDivider
をマウスでクリックしたとき選択状態になるよう設定します。
Screenshot
Advertisement
サンプルコード
JSplitPane splitPane = new JSplitPane();
Container divider = ((BasicSplitPaneUI) splitPane.getUI()).getDivider();
divider.addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
super.mousePressed(e);
splitPane.requestFocusInWindow();
// or
// Action startResize = splitPane.getActionMap().get("startResize");
// startResize.actionPerformed(new ActionEvent(
// splitPane, ActionEvent.ACTION_PERFORMED, "startResize"));
}
});
View in GitHub: Java, Kotlin解説
Default
- デフォルトの
JSplitPane
ではDivider
をクリックしてもフォーカス移動は発生しない - F8キーを押して
startResize
アクションを実行しないとDivider
は選択状態にならず、カーソルキーでのDivider
移動は不可 JSplitPane
とその子コンポーネントがすべてフォーカス不可の場合、Divider
を選択状態にすることはできないJSplitPane#setFocusable(true)
を設定すればTabキーなどでDivider
を選択状態にできる
- デフォルトの
Divider.addMouseListener
BasicSplitPaneUI#getDivider()
で取得したDivider
にMouseListener
を設定して、クリックされたら親のJSplitPane
にフォーカスを移動することでDivider
を選択状態にするContainer
であるDivider
にrequestFocusInWindow()
を実行することは可能だが、これを実行してもDivider
は選択状態にならないJSplitPane
とその子コンポーネントがすべてフォーカス不可でもDivider
を選択状態にできる
- メモ: カーソルキーによる
Divider
の移動量を変更したいBasicSplitPaneUI.KEYBOARD_DIVIDER_MOVE_OFFSET
が定義されているがどこからも使用されていない?BasicSplitPaneUI#getKeyboardMoveIncrement()
メソッドが存在してマジックナンバーで3
が返される- これをオーバーライドして移動量を変更したいが、パッケージプライベートなので利用しづらい