行の任意の場所をクリックしてJTree行を選択できるようにするコードをここから取得しました。単一行選択モードで正常に機能します。ただし、複数の行の選択を処理するためにそれを変更する方法がわかりません。ユーザーが複数選択を行っている場合をどのように区別しますか(たとえば、Shiftボタンまたはコントロールボタンを押しながら行をマウスで左クリックするなど)?
インポートjava.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; インポートjavax.swing.JFrame; インポートjavax.swing.JTree; インポートjavax.swing.SwingUtilities; インポートjavax.swing.tree.DefaultMutableTreeNode; インポートjavax.swing.tree.TreeNode; @SuppressWarnings( "シリアル") パブリッククラスNavTreeはJTreeを拡張します{ プライベートブール値fWholeRowSelectionEnabled; プライベートMouseListenerfRowSelectionListener; 最終的なNavTreefThis; public NavTree(TreeNode rootNode){ super(rootNode); fThis = this; 初期化(); } public NavTree(){ fThis = this; 初期化(); } private void init(){ // setCellRenderer(new NavTreeCellRenderer()); fRowSelectionListener = new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(SwingUtilities.isLeftMouseButton(e)){ int closeRow = fThis.getClosestRowForLocation( e.getX()、e.getY()); 長方形closestRowBounds=fThis.getRowBounds(closestRow); if(e.getY()> = closeRowBounds.getY()&& e.getY()<closestRowBounds.getY()+ closeRowBounds.getHeight()){ if(e.getX()> closeRowBounds.getX()&& closeRow <fThis.getRowCount()){ fThis.setSelectionRow(closestRow); } } そうしないと fThis.setSelectionRow(-1); } } }; setWholeRowSelectionEnabled(true); } public void setWholeRowSelectionEnabled(boolean WholesaleRowSelectionEnabled){ fWholeRowSelectionEnabled = WholesaleRowSelectionEnabled; if(fWholeRowSelectionEnabled) addMouseListener(fRowSelectionListener); そうしないと removeMouseListener(fRowSelectionListener); } public boolean isWholeRowSelectionEnabled(){ fWholeRowSelectionEnabledを返します。 } public static void main(String [] args){ JFrameフレーム=新しいJFrame(); DefaultMutableTreeNode root = new DefaultMutableTreeNode( "Root"); root.add(new DefaultMutableTreeNode( "Child 1")); root.add(new DefaultMutableTreeNode( "Child 2")); root.add(new DefaultMutableTreeNode( "Child 3")); NavTreeツリー=新しいNavTree(ルート); frame.add(tree); frame.setSize(200、300); frame.setVisible(true); } }