2013-11-04 3 views
0

노드를 마우스 오른쪽 버튼으로 클릭 할 때 "이름 바꾸기", "지역 추가 (부모) 추가", "추가"옵션을 제공해야하는 jTree를 만들고 싶습니다. 도시 (아이) ". 내가 스윙 새로운 오전으로jTree에서 마우스 오른쪽 버튼 메뉴 팝업 만들기

내의 JTree의 이름은 코드 수있는 한 도움, 지점

입니다. 미리 감사드립니다.

감사합니다, Sarkwa

답변

2

단계 :

  • MouseListnerJTree
  • 에 추가 마우스 수신기는 Button3의 (오른쪽 클릭)에서 이벤트에 응답하게한다.
  • 목록 동작을 JPopupMenu으로 표시하십시오.
  • 메뉴에서 옵션을 추가하십시오.
  • 옵션을 적절하게 수정하려면 JTree에 대한 참조가 필요합니다.
+0

는 u는 나에게 어떻게의 예를 들어 줄 개 pls 수 읽기가 완료? 그것을 이해할 것입니다 – Sarkwa

+1

어느 단계? 스윙 튜토리얼의 일부를 읽을 필요가있는 것처럼 들리지만 많은 예제가 있습니다. – jzd

2

setComponentPopupMenu 방법을 JTreeMouseListener으로 사용하는 것이 좋습니다. mouseListener에서 메뉴 노드를 결정하고 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을 생성하는 방법입니다. popUp의 모든 항목에 대해 Listener를 추가합니다. 이름 바꾸기 노드의 경우 메뉴 대신 CellEditor을 사용하는 것이 좋습니다. 간단한 예제로 here을 사용합니다.

그리고이 tutorial for JTree

관련 문제