JSplitPaneのDividerをマウスクリックで選択状態にする
Total: 2198, Today: 2, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JSplitPaneのDividerをマウスでクリックしたとき選択状態になるよう設定します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
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が返される- これをオーバーライドして移動量を変更したいが、パッケージプライベートなので利用しづらい