JTree là lớp con của JComponent hiển thị dữ liệu có tính phân cấp bằng cách thêm nút vào nút, giữ khái niệm nút cha và con. Mỗi phần tử trong cây trở thành một nút. Các nút có thể mở rộng và thu gọn. Chúng ta có thể triển khai chuột phải trên từng nút JTree bằng phương thức mouseReleased() của lớp MouseAdapter và gọi phương thức show() của JPopupMenu để hiển thị menu popup trên nút cây.
Ví dụ
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class JTreeRightClickTest extends JFrame {
public JTreeRightClickTest() {
DefaultMutableTreeNode root = createNodes();
JTree tree = new JTree(root);
final TreePopup treePopup = new TreePopup(tree);
tree.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger()) {
treePopup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
add(new JScrollPane(tree), BorderLayout.NORTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static DefaultMutableTreeNode createNodes() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Technology");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Java");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Python");
DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("Selenium");
node1.add(new DefaultMutableTreeNode("Programming Language"));
node2.add(new DefaultMutableTreeNode("Programming Language"));
node3.add(new DefaultMutableTreeNode("Testing Framework"));
root.add(node1);
root.add(node2);
root.add(node3);
return root;
}
public static void main(String args[]) {
new JTreeRightClickTest();
}
}
class TreePopup extends JPopupMenu {
public TreePopup(JTree tree) {
JMenuItem delete = new JMenuItem("Delete");
JMenuItem add = new JMenuItem("Add");
delete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
System.out.println("Delete child");
}
});
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
System.out.println("Add child");
}
});
add(delete);
add(new JSeparator());
add(add);
}
}
Kết quả
