我想给数中的几点添加鼠标右击,出现一个下拉菜单,包含删除,新建操作,该怎么操作呢
解决方案 »
- 在java中多线程中,如何让一个上一个线程执行完成后,才开始下一个线程执行
- java IO问题 工程内的文件无法写入
- 我在一个Frame里面添加了一个JInternalFrame,由于Frame的菜单很长,让JInternalFrame遮挡住了,这怎么办呀?
- 急等待解答java.util.Date()返回类型的异常!
- 求助,多媒体文件格式分析方法
- 我在64位Red hat上运行Eclipse的时候,抛出了一个异常!
- 小问题!!
- 一个有关在jpanel上添加组件和画线的问题!!!!!!!!!!!!!
- URLConnection 问题?请熟悉的一定帮忙!
- legacy system是什么意思?
- java
- 如何画一个关闭按钮?
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellEditor;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel; public class Test extends JFrame implements MouseListener, ActionListener {
JTree tree; JPopupMenu popMenu; JMenuItem addItem;
JMenuItem delItem;
JMenuItem editItem; public Test() {
tree = new JTree();
tree.setEditable(true);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addMouseListener(this);
tree.setCellEditor(new DefaultTreeCellEditor(tree,
new DefaultTreeCellRenderer()));
getContentPane().add(tree);
setSize(200, 200); popMenu = new JPopupMenu();
addItem = new JMenuItem("添加");
addItem.addActionListener(this);
delItem = new JMenuItem("删除");
delItem.addActionListener(this);
editItem = new JMenuItem("修改");
editItem.addActionListener(this); popMenu.add(addItem);
popMenu.add(delItem);
popMenu.add(editItem);
} public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) {
TreePath path = tree.getPathForLocation(e.getX(), e.getY()); // 关键是这个方法的使用
if (path == null) {
return;
}
tree.setSelectionPath(path); if (e.getButton() == 3) {
popMenu.show(tree, e.getX(), e.getY());
}
} public void mouseReleased(MouseEvent e) { } public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (e.getSource() == addItem) {
((DefaultTreeModel) tree.getModel()).insertNodeInto(
new DefaultMutableTreeNode("Test"), node, node
.getChildCount());
tree.expandPath(tree.getSelectionPath());
} else if (e.getSource() == delItem) {
if (node.isRoot()) {
return;
}
((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node);
} else if (e.getSource() == editItem) {
tree.startEditingAtPath(tree.getSelectionPath());
}
} public static void main(String[] args) {
Test frame = new Test();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} 简单看一下吧,如果需要封装或者什么的自己看情况
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellEditor;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel; public class Test extends JFrame implements MouseListener, ActionListener {
JTree tree; JPopupMenu popMenu; JMenuItem addItem;
JMenuItem delItem;
JMenuItem editItem; public Test() {
tree = new JTree();
tree.setEditable(true);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addMouseListener(this);
tree.setCellEditor(new DefaultTreeCellEditor(tree,
new DefaultTreeCellRenderer()));
getContentPane().add(tree);
setSize(200, 200); popMenu = new JPopupMenu();
addItem = new JMenuItem("添加");
addItem.addActionListener(this);
delItem = new JMenuItem("删除");
delItem.addActionListener(this);
editItem = new JMenuItem("修改");
editItem.addActionListener(this); popMenu.add(addItem);
popMenu.add(delItem);
popMenu.add(editItem);
} public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) {
TreePath path = tree.getPathForLocation(e.getX(), e.getY()); // 关键是这个方法的使用
if (path == null) {
return;
}
tree.setSelectionPath(path); if (e.getButton() == 3) {
popMenu.show(tree, e.getX(), e.getY());
}
} public void mouseReleased(MouseEvent e) { } public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (e.getSource() == addItem) {
((DefaultTreeModel) tree.getModel()).insertNodeInto(
new DefaultMutableTreeNode("Test"), node, node
.getChildCount());
tree.expandPath(tree.getSelectionPath());
} else if (e.getSource() == delItem) {
if (node.isRoot()) {
return;
}
((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node);
} else if (e.getSource() == editItem) {
tree.startEditingAtPath(tree.getSelectionPath());
}
} public static void main(String[] args) {
Test frame = new Test();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} 可以满足需求,但是修改不太好用
(NetTestIconNodeRenderer) testTree.getCellRenderer()) {
/* CellEditor */
protected TreeCellEditor createTreeCellEditor() {
/* 边界 */
Border aBorder = UIManager.getBorder("Tree.editorBorder");
/* TextField */
final DefaultTextField test = new DefaultTextField(aBorder);
/* 添加动作事件 */
test.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { }
}); test.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
testTree.setEditable(false);
}
}); DefaultCellEditor editor = new DefaultCellEditor(test) { public boolean shouldSelectCell(java.util.EventObject event) {
boolean retValue = super.shouldSelectCell(event);
getComponent().requestFocus();
return retValue;
} public void cancelEditing() {
test.setText(nodeName);
testTree.setEditable(false);
} public Object getCellEditorValue() {
if (test.getText().trim().length() > 0) {
return test.getText().trim();
} else {
return nodeName;
}
}
}; return editor;
}
});