JTree가 있고 여러 노드를 선택할 수 있습니다 (Ctrl 키). 마우스 오른쪽 버튼을 클릭하면 '새로 고침'을 선택할 수있는 팝업 창이 나타납니다. (이 방법에 대해 설명하는 다른 질문이 있습니다)jtree 마우스 오른쪽 버튼으로 하나의 노드 만 선택
여러 노드를 선택하고 마우스 오른쪽 버튼을 클릭하면 오른쪽 클릭 한 노드 만 선택되고 다른 노드는 선택 취소됩니다.
예를 들어 노드 3 개 (리프)를 선택하고 마우스 오른쪽 버튼을 클릭 한 다음 '새로 고침'을 선택하고 해당 노드 3 개를 계속 선택하려고합니다.
어떤 조언이 필요합니까? 감사!
예 :
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class JTreeMultiSelect extends JFrame{
public JTreeMultiSelect() {
super("Test");
JTree myTree = new JTree();
myTree.getSelectionModel()
.setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
// add MouseListener to tree
MouseAdapter ma = new MouseAdapter() {
private void myPopupEvent(MouseEvent e) {
int x = e.getX();
int y = e.getY();
JTree tree = (JTree)e.getSource();
TreePath path = tree.getPathForLocation(x, y);
if (path == null)
return;
tree.setSelectionPath(path);
DefaultMutableTreeNode rightClickedNode =
(DefaultMutableTreeNode)path.getLastPathComponent();
if(rightClickedNode.isLeaf()){
JPopupMenu popup = new JPopupMenu();
final JMenuItem refreshMenuItem = new JMenuItem("refresh");
refreshMenuItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("refresh!");
}
});
popup.add(refreshMenuItem);
popup.show(tree, x, y);
}
}
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) myPopupEvent(e);
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) myPopupEvent(e);
}
};
myTree.addMouseListener(ma);
JPanel myPanel = new JPanel();
myPanel.add(myTree);
this.add(myPanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new JTreeMultiSelect();
}
}
더 나은 도움을 받으려면 TreeSelectionListener, 선택 모드, getSelectedXxx 코드 및 호출 방법을 추가하여 JFrame 및 JTree에 대해서만 짧고 실행 가능한 컴파일 가능한 [SSCCE] (http://sscce.org/) JPopupMenu를 볼 수 있습니다 – mKorbel
코드를 보여주세요! 마우스 오른쪽 버튼으로 선택 항목을 변경하는 것처럼 들리지만 일부 코드가 표시되지 않으면 알 수 없습니다. – LiverpoolFTW
코드를 추가했습니다. 그것은 트리에 있습니다 .setSelectionPath (경로); –