Swing/DividerFocus のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DividerFocus へ行く。
- category: swing folder: DividerFocus title: JSplitPaneのDividerをマウスクリックで選択状態にする tags: [JSplitPane, Divider] 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.addMouseListenerBasicSplitPaneUI#getDivider()で取得したDividerにMouseListenerを設定して、クリックされたら親のJSplitPaneにフォーカスを移動することでDividerを選択状態にするContainerであるDividerにrequestFocusInWindow()を実行することは可能だが、これを実行してもDividerは選択状態にならないJSplitPaneとその子コンポーネントがすべてフォーカス不可でもDividerを選択状態にできる
- メモ: カーソルキーによる
Dividerの移動量を変更したいBasicSplitPaneUI.KEYBOARD_DIVIDER_MOVE_OFFSETが定義されているがどこからも使用されていない?BasicSplitPaneUI#getKeyboardMoveIncrement()メソッドが存在してマジックナンバーで3が返される- これをオーバーライドして移動量を変更したいが、パッケージプライベートなので利用しづらい