У меня есть JTree, и я могу (ctrl) выбрать несколько узлов. Когда я нажимаю правой кнопкой мыши, я получаю всплывающее окно, где я могу выбрать «обновить». (есть другие вопросы на этом сайте, которые объясняют, как это сделать)jtree right click выбирает только один узел
Проблема заключается в том, что при выборе нескольких узлов, и я нажимаю правой кнопкой мыши, выбирается только тот, который я щелкнул правой кнопкой мыши, а остальные не выбраны.
Я хочу выбрать, например, 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();
}
}
для лучшей помощи, скорее всего, опубликуйте [SSCCE] (http://sscce.org/), короткий, плавный, компилируемый, только о JFrame и JTree, с добавленным TreeSelectionListener, его режимом выбора, кодом, где вы получаетеSelectedXxx и как вызывать JPopupMenu будет видимым – mKorbel
Показать код! Похоже, вы меняете выделение по правому клику, но не можете сказать, если я не вижу код. – LiverpoolFTW
Я добавил код. Он находится в tree.setSelectionPath (путь); –