0

ノードを右クリックすると、「名前の変更」、「地域(親)の追加」、「都市(子)の追加」のオプションが表示されるjTreeを作成したいと考えています。

私のjTreeの名前は枝です

私はswingが初めてなので、コードを手伝ってくれる人はいますか。前もって感謝します。

よろしく、 サルクワ

4

2 に答える 2

4

withsetComponentPopupMenuのメソッドを使用することをお勧めします。mouseListener でメニューの Node を決定し、popupMenu を一度生成します。仕事をするのに役立つ簡単な例を書きます。JTreeMouseListener

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 を生成します。popUp のすべてのアイテムに対して、アクションのリスナーを追加します。ノードの名前を変更するCellEditorには、メニューの代わりに使用することをお勧めします。ここに使用する簡単な例を書きます。

そして、このチュートリアルを読んでくださいJTree

于 2013-11-07T14:58:43.803 に答える
2

手順:

  • MouseListnerに aを追加します。JTree
  • マウス リスナーが Button3 (右クリック) からのイベントにのみ応答するようにします。
  • リスナーのアクションに を表示させJPopupMenuます。
  • メニューにオプションを追加します
  • オプションにはJTree、適切な変更を行うために への参照が必要なアクションがあります。
于 2013-11-04T15:35:46.267 に答える