gpt4 book ai didi

java - 在 jTree 上创建右键单击弹出菜单

转载 作者:行者123 更新时间:2023-12-01 08:08:06 33 4
gpt4 key购买 nike

我想创建一个jTree,当我右键单击一个节点时,应该给我“重命名”,“添加区域(父)”,“添加城市(子)”选项。

我的 jTree 的名称是 Branches

由于我是 Swing 新手,有人可以帮忙编写代码吗?提前致谢。

问候,萨夸

最佳答案

我建议您将JTreesetComponentPopupMenu方法与MouseListener一起使用。在 mouseListener 中确定菜单的 Node 并生成一次 popupMenu。我写了一个简单的例子,可以帮助你完成你的工作。

public class Main extends javax.swing.JFrame {

private JTree t;
private DefaultTreeModel model;
private DefaultMutableTreeNode selectedNode;

public Main() {
DefaultMutableTreeNode n = new DefaultMutableTreeNode("test");
n.add(new DefaultMutableTreeNode("test2"));
model = new DefaultTreeModel(n);
t = new JTree(model);
t.setEditable(true);
t.setComponentPopupMenu(getPopUpMenu());
t.addMouseListener(getMouseListener());
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().add(t);
pack();
setVisible(true);
}

private MouseListener getMouseListener() {
return new MouseAdapter() {

@Override
public void mousePressed(MouseEvent arg0) {
if(arg0.getButton() == MouseEvent.BUTTON3){
TreePath pathForLocation = t.getPathForLocation(arg0.getPoint().x, arg0.getPoint().y);
if(pathForLocation != null){
selectedNode = (DefaultMutableTreeNode) pathForLocation.getLastPathComponent();
} else{
selectedNode = null;
}

}
super.mousePressed(arg0);
}
};
}

private JPopupMenu getPopUpMenu() {
JPopupMenu menu = new JPopupMenu();
JMenuItem item = new JMenuItem("edit");
item.addActionListener(getEditActionListener());
menu.add(item);

JMenuItem item2 = new JMenuItem("add");
item2.addActionListener(getAddActionListener());
menu.add(item2);

return menu;
}

private ActionListener getAddActionListener() {
return new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
if(selectedNode != null){
System.out.println("pressed" + selectedNode);
DefaultMutableTreeNode n = new DefaultMutableTreeNode("added");
selectedNode.add(n);
t.repaint();
t.updateUI();
}
}
};
}

private ActionListener getEditActionListener() {
return new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
if(selectedNode != null){
//edit here
System.out.println("pressed" + selectedNode);
}
}
};
}

public static void main(String... s){
new Main();
}

}

getPopUpMenu 方法生成您的弹出窗口。对于 popUp 中的所有项目,我添加了操作监听器。对于重命名节点,我建议您使用 CellEditor 而不是菜单,我编写了使用它的简单示例 here .

并阅读此tutorial for JTree

关于java - 在 jTree 上创建右键单击弹出菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19771159/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com