JTabbedPaneのタブ選択をマウスホイールで変更する
Total: 1607
, Today: 1
, Yesterday: 5
Posted by aterai at
Last-modified:
概要
JTabbedPane
のタブ選択をマウスホイールの上下回転で変更します。
Screenshot
Advertisement
サンプルコード
private class TabWheelHandler implements MouseWheelListener {
@Override public void mouseWheelMoved(MouseWheelEvent e) {
JTabbedPane src = (JTabbedPane) e.getComponent();
if (!getTabAreaBounds(src).contains(e.getPoint())) {
return;
}
boolean dir = (e.isControlDown() ? -1 : 1) * e.getPreciseWheelRotation() > 0;
int id = ActionEvent.ACTION_PERFORMED;
String cmd;
if (check.isSelected()) {
cmd = dir ? "scrollTabsForwardAction" : "scrollTabsBackwardAction";
} else {
cmd = dir ? "navigateNext" : "navigatePrevious";
}
ActionEvent event = new ActionEvent(
src, id, cmd, e.getWhen(), e.getModifiersEx());
src.getActionMap().get(cmd).actionPerformed(event);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTabbedPane
に上方向のホイール回転で前のタブ、下方向のホイール回転で次のタブを選択するMouseWheelListener
を追加しています。
- マウスカーソルがタブエリア上にある場合のみホイール回転でタブ選択を変更
- カーソルキーによるタブ選択移動とは異なり、タブにフォーカスがない場合でもマウスカーソルがタブエリア上に存在すればタブ選択を変更可能
- 参考: JTabbedPane間でタブのドラッグ&ドロップ移動
- Ctrlキーを押しながらホイール回転で逆方向にタブ選択を移動する
JTabbedPane
のActionMap
からnavigateNext
、navigatePrevious
アクションを取得してホイール回転の方向に応じてactionPerformed
メソッドを実行- このため末尾タブから先頭、または先頭タブから末尾へのタブ選択移動が可能
JTabbedPane#setEnabledAt(index, false)
で選択不可にしたタブは自動的にスキップするJTabbedPane#setSelectedIndex(index)
を使用すると選択不可にしたタブも選択されてしまう
navigateNext|navigatePrevious
アクションはカーソルキーに割り当てられているnavigateRight|navigateLeft|navigateUp|navigateDown
とは異なりタブ配置位置に依存せずにタブ選択の変更が可能- たとえば
SCROLL_TAB_LAYOUT
レイアウトでタブ配置位置がTOP
のJTabbedPane
の場合、左右カーソルキーでタブ選択は変更可能だが上下キーは無反応 WRAP_TAB_LAYOUT
レイアウトでタブ配置位置がTOP
のJTabbedPane
の場合、左右カーソルキーでタブ選択は同一ラン内でタブ選択が変更可能(先頭から末尾へのループなどは不可)、上下キーは上下のタブランへの移動になる
- たとえば
scroll tabs
をチェックするとscrollTabsForwardAction|scrollTabsBackwardAction
アクションを使用してタブ選択は実行せずにタブエリアのスクロールのみホイール回転で実行する