Swing/TreeScrollsHorizontallyAndVertically の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/TreeScrollsHorizontallyAndVertically へ行く。
- Swing/TreeScrollsHorizontallyAndVertically の差分を削除
--- 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 --- * Summary [#summary] `JTree`のノードがキー入力で選択されたとき、そのノードまで垂直方向だけでなく水平方向にもスクロールするよう設定します。 #download(https://drive.google.com/uc?id=13R7Ag56ENIHuBxOJI8210gput9I5HmJr) * Source Code Examples [#sourcecode] #code(link){{ 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))); }} * Explanation [#explanation] - `Default` -- `JTree`のノードサイズが大きく垂直・水平スクロールバーが表示されている状態でカーソルキーやマウスクリックでノードを選択しても水平方向にはスクロールしない - `Tree.scrollsHorizontallyAndVertically` -- `UIManager.put("Tree.scrollsHorizontallyAndVertically", true)`でキー入力でノード選択した場合そのノード領域が可能な限り表示されるよう垂直・水平方向ともにスクロールする -- `Tree.scrollsHorizontallyAndVertically`の初期値は`Boolean.FALSE` -- この設定はマウスでのノード選択には無効 --- キー入力でも複数ノード選択時は効果がない -- この設定は`WindowsLookAndFeel`では無効 - `TreeSelectionListener` -- `TreeSelectionListener`を追加して`JTree.scrollPathToVisible(TreeSelection#getNewLeadSelectionPath())`を実行し、マウスやキー入力によるノード選択で垂直・水平ともにスクロールするよう設定 * Reference [#reference] - [[JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする>Swing/ScrollRectToVisible]] * コメント [#comment] * Comment [#comment] #comment #comment