Swing/ToggleTreeNodeByKeyStroke のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ToggleTreeNodeByKeyStroke へ行く。
- 1 (2023-12-04 (月) 00:01:47)
- 2 (2023-12-30 (土) 23:09:37)
- 3 (2024-06-30 (日) 02:39:57)
- category: swing folder: ToggleTreeNodeByKeyStroke title: JTreeのノード展開・折り畳み状態をキー入力で切り替える tags: [JTree, TreeNode] author: aterai pubdate: 2023-12-04T00:00:25+09:00 description: JTreeの親ノードが選択されている場合、キー入力でその展開・折り畳み状態を切り替えます。 image: https://drive.google.com/uc?id=13FbBMCLGuFg240-BFwNXCWSCryo813Dl
概要
JTree
の親ノードが選択されている場合、キー入力でその展開・折り畳み状態を切り替えます。
Screenshot
Advertisement
サンプルコード
InputMap im = tree.getInputMap(JComponent.WHEN_FOCUSED);
int modifiers1 = InputEvent.CTRL_DOWN_MASK;
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_T, modifiers1), "toggle");
int modifiers2 = InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK;
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_T, modifiers2), "toggle2");
ActionMap am = tree.getActionMap();
am.put("toggle2", new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
int row = tree.getLeadSelectionRow();
TreePath path = tree.getPathForRow(row);
if (!tree.isExpanded(path)) {
tree.expandPath(path);
} else {
tree.collapsePath(path);
}
}
});
View in GitHub: Java, Kotlin解説
BasicTreeUI.TreeToggleAction
BasicTreeUI
にTreeToggleAction
が実装されてすでにJTree
のActionMap
に追加されているので、これを呼び出すKeyStroke
をJTree
のInputMap
に追加- このサンプルではCtrl+Tで
TreeToggleAction
を実行 - 展開
+
、折り畳み-
アイコンのシングルクリックと同等 TreeNode
の左マウスボタンでのダブルクリック(JTree#getToggleClickCount()
がデフォルトの2
の場合)とは異なり、TreeToggleAction
によるノードトグルはその子ノード以外の選択状態は維持される
JTree#isExpanded(...), JTree#collapsePath(...)
JTree#isExpanded(TreePath)
で展開・折り畳み状態をチェックし、JTree#isExpanded(...)
で展開、JTree#collapsePath(...)
で折り畳みを実行するAbstractAction
をJTree
のActionMap
に追加- このサンプルではShift+Ctrl+Tでこの
Action
を実行 TreeToggleAction
とは異なり、行表示スクロールなどの処理を省略している
参考リンク
- JTreeで特定のノードをマウスクリックした場合のみ展開不可に設定する
- [JDK-8317771] [macos14] Expand/collapse a JTree using keyboard freezes the application in macOS 14 Sonoma - Java Bug System