Swing/TreeScrollsHorizontallyAndVertically のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TreeScrollsHorizontallyAndVertically へ行く。
- 1 (2021-10-11 (月) 01:59:00)
- 2 (2021-10-11 (月) 11:40:16)
- category: swing folder: TreeScrollsHorizontallyAndVertically title: JTreeの選択されたノードが表示される位置まで水平スクロールする tags: [JTree, JScrollPane, UIManager, LookAndFeel] author: aterai pubdate: 2021-10-11T01:53:00+09:00 description: JTreeのノードがキー入力で選択されたとき、そのノードまで垂直方向だけでなく水平方向にもスクロールするよう設定します。 image: https://drive.google.com/uc?id=13R7Ag56ENIHuBxOJI8210gput9I5HmJr
概要
JTree
のノードがキー入力で選択されたとき、そのノードまで垂直方向だけでなく水平方向にもスクロールするよう設定します。
Screenshot
Advertisement
サンプルコード
JTree tree1 = new JTree(makeTreeRoot());
expandAll(tree1);
JTree tree2 = new JTree(makeTreeRoot());
expandAll(tree2);
tree2.addTreeSelectionListener(e ->
tree2.scrollPathToVisible(e.getNewLeadSelectionPath()));
String key = "Tree.scrollsHorizontallyAndVertically";
JCheckBoxMenuItem check = new JCheckBoxMenuItem(key);
check.addActionListener(e -> UIManager.put(key, check.isSelected()));
JMenu menu = new JMenu("View");
menu.add(check);
JMenuBar mb = new JMenuBar();
mb.add(menu);
mb.add(LookAndFeelUtil.createLookAndFeelMenu());
EventQueue.invokeLater(() -> getRootPane().setJMenuBar(mb));
add(makeTitledPanel("Default", new JScrollPane(tree1)));
add(makeTitledPanel("TreeSelectionListener", new JScrollPane(tree2)));
View in GitHub: Java, Kotlin解説
Default
JTree
のノードサイズが大きく垂直・水平スクロールバーが表示されている状態でカーソルキーやマウスクリックでノードを選択しても水平方向にはスクロールしない
Tree.scrollsHorizontallyAndVertically
UIManager.put("Tree.scrollsHorizontallyAndVertically", true)
でキー入力でノード選択した場合そのノード領域が可能な限り表示されるよう垂直・水平方向ともにスクロールするTree.scrollsHorizontallyAndVertically
の初期値はBoolean.FALSE
- この設定はマウスでのノード選択には無効
- この設定は
WindowsLookAndFeel
では無効
TreeSelectionListener
TreeSelectionListener
を追加してJTree.scrollPathToVisible(TreeSelection#getNewLeadSelectionPath())
を実行し、マウスやキー入力によるノード選択で垂直・水平ともにスクロールするよう設定