JSplitPaneのDividerをマウスクリックで選択状態にする
Total: 1859
, Today: 3
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
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
が返される- これをオーバーライドして移動量を変更したいが、パッケージプライベートなので利用しづらい