2013-05-30 2 views
0

내 목표는 JTable 노드를 JTree 노드로 사용하고 두 번 클릭하여 JTable의 셀을 편집 할 수있게하는 것입니다. 렌더링이 잘 작동하지만 (Jtable as a Jtree Node) 테이블의 단일 셀을 편집하는 방법을 알지 못합니다. 편집 가능한 트리를 설정하면 더블 클릭을 사용하여 노드를 편집 할 수 있지만 사용자가 렌더링에 사용하는 숫자 앞에 "%"를 유지하는 것을 꺼리는 것처럼 보일 수 있기 때문에 셀을 직접 편집하려고합니다. 트리가 편집 가능하도록 설정되지 않은 경우 두 번 클릭하면 아무 것도 수행되지 않습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?JTable 셀을 JTree 노드로 편집

public class TreeWithCellRenderer { 

static class MyCellRenderer implements TreeCellRenderer { 
    @Override 
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, 
      boolean leaf, int row, boolean hasFocus) { 

     String command = (String) ((DefaultMutableTreeNode) value).getUserObject(); 
     final String[] params = command.split("%"); 
     JTable table = new JTable(); 

     table.setModel(new DefaultTableModel() { 
      private static final long serialVersionUID = 1L; 

      @Override 
      public int getRowCount() { 
       return 1; 
      } 

      @Override 
      public int getColumnCount() { 
       return params.length; 
      } 

      @Override 
      public Object getValueAt(int row, int column) { 
       return params[column]; 
      } 
     }); 
     return table; 
    } 
} 

private static void createAndShowGUI() { 
    // Create and set up the window. 
    JFrame frame = new JFrame("JTreeTutorial"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // Tree components 
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); 
    DefaultMutableTreeNode cmd1 = new DefaultMutableTreeNode("name %1"); 
    DefaultMutableTreeNode cmd2 = new DefaultMutableTreeNode("name %1 %2"); 
    root.add(cmd1); 
    root.add(cmd2); 

    JTree jTree = new JTree(root); 
    //Don't like it too much, as it makes you edit the whole node, not cells 
    //jTree.setEditable(true); 
    jTree.setCellRenderer(new MyCellRenderer()); 
    JScrollPane scroolPane = new JScrollPane(jTree); 
    frame.add(scroolPane); 

    // Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    createAndShowGUI(); 
} 

}

답변

1
+0

감사합니다 : 그것은 수도

은 다음과 같습니다. 나는 http://stackoverflow.com/questions/12642792/easy-and-fast-jtree-cell-editor에서 예제를 따라 가려고했으나 전체 행 인 트리 셀을 편집 할 수있게하고 편집하고 싶다. 이 행에서 하나의 셀만. 예제를 가르쳐 주시겠습니까? 나는 Swing에서 꽤 초보자입니다. – dalvarezmartinez1

0

데이터 모델에 isCellEditable 메소드를 추가해야합니다. 그렇지 않으면 테이블을 편집 할 수 없습니다.

@Override 
public boolean isCellEditable(int row, int col) 
{ 
    return col >= 0; 
} 
+0

isCellEditable 메서드가 다음과 같은 DefaultTableModel에서 확장되어 테이블을 사용하는 유일한 모델입니다. public boolean isCellEditable (int row, int column) { return true; } 그래서 필요하지 않다고 생각합니다. – dalvarezmartinez1

관련 문제