Всплывающих при JTree

Это Java советов показывает, как приложить всплывающего меню JTree.


import javax.swing.*;

import javax.swing.tree.*;

import java.awt.event.*;

import java.awt.*;

import java.util.*;



public class TreeWithPopup extends JPanel {

    

    DefaultMutableTreeNode root, node1, node2, node3;

    

    public TreeWithPopup() {

        MyJTree tree;

        root = new DefaultMutableTreeNode("root"true);

        node1 = new DefaultMutableTreeNode("node 1"true);

        node2 = new DefaultMutableTreeNode("node 2" true);

        node3 = new DefaultMutableTreeNode("node 3"true);

        root.add(node1);

        node1.add(node2);

        root.add(node3);

        setLayout(new BorderLayout());

        tree = new MyJTree(root);

        add(new JScrollPane((JTree)tree),"Center");

    }

    

    public Dimension getPreferredSize(){

        return new Dimension(300300);

    }

    

    public static void main(String s[]){

        JFrame frame = new JFrame("Tree With Popup");

        TreeWithPopup panel = new TreeWithPopup();

        

        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame.setForeground(Color.black);

        frame.setBackground(Color.lightGray);

        frame.getContentPane().add(panel,"Center");

        

        frame.setSize(panel.getPreferredSize());

        frame.setVisible(true);

        frame.addWindowListener(new WindowCloser());

    }

}



class WindowCloser extends WindowAdapter {

    public void windowClosing(WindowEvent e) {

        Window win = e.getWindow();

        win.setVisible(false);

        System.exit(0);

    }

}



class MyJTree extends JTree implements ActionListener{

    JPopupMenu popup;

    JMenuItem mi;

    

    MyJTree(DefaultMutableTreeNode dmtn) {

        super(dmtn);

        // define the popup

        popup = new JPopupMenu();

        mi = new JMenuItem("Insert a children");

        mi.addActionListener(this);

        mi.setActionCommand("insert");

        popup.add(mi);

        mi = new JMenuItem("Remove this node");

        mi.addActionListener(this);

        mi.setActionCommand("remove");

        popup.add(mi);

        popup.setOpaque(true);

        popup.setLightWeightPopupEnabled(true);

        

        addMouseListener(

                new MouseAdapter() {

            public void mouseReleasedMouseEvent e ) {

                if e.isPopupTrigger()) {

                    popup.show( (JComponent)e.getSource(), e.getX(), e.getY() );

                }

            }

        }

        );

        

    }

    public void actionPerformed(ActionEvent ae) {

        DefaultMutableTreeNode dmtn, node;

        

        TreePath path = this.getSelectionPath();

        dmtn = (DefaultMutableTreeNodepath.getLastPathComponent();

        if (ae.getActionCommand().equals("insert")) {

            node = new DefaultMutableTreeNode("children");

            dmtn.add(node);

            // thanks to Yong Zhang for the tip for refreshing the tree structure.

            ((DefaultTreeModel )this.getModel()).nodeStructureChanged((TreeNode)dmtn);

        }

        if (ae.getActionCommand().equals("remove")) {

            node = (DefaultMutableTreeNode)dmtn.getParent();

            // Bug fix by essam

            int nodeIndex=node.getIndex(dmtn)// declare an integer to hold the selected nodes index

            dmtn.removeAllChildren();          // remove any children of selected node

            node.remove(nodeIndex);            // remove the selected node, retain its siblings

            ((DefaultTreeModel )this.getModel()).nodeStructureChanged((TreeNode)dmtn);       }

    }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>