2014-02-22 2 views
1

TreeView에서 TreeItems에 청취자를 연결하는 방법을 마침내 다소 파악한 후에 시간이 지나면 아마도 그렇게하는 것이 옳은 방법 일 수 있지만 지금까지는 작동하는 것 같습니다. 한가지는 아니지만, 그게 "레이블"또는 더 나은 TreeItems의 텍스트가 더 이상 표시되지 않습니다. enter image description hereJavaFX TreeItem 문자열이 나타나지 않습니다

누구든지 내 코드를보고 나에게 완전히 잘못되었거나 텍스트가 더 이상 표시되지 않는 이유는 무엇입니까? 미리 감사드립니다.

은 코드 : 사용자 지정 셀이 정의되면, setText() 메소드가 오버라이드 (override) updateItem() 방법에

TreeView<String> tree = new TreeView<>(); 

TreeItem<String> treeRoot = new TreeItem<>(Login.name + " - " + Login.accountType); 
treeRoot.getChildren().addAll(new TreeItem<>("Branches"), 
     new TreeItem<>("Planning"), new TreeItem<>("Courses"), 
     new TreeItem<>("Add new item")); 

treeRoot.getChildren().get(1).getChildren().addAll(
     new TreeItem<>("2014 - Q1"), new TreeItem<>("2014 - Q2"), 
     new TreeItem<>("2014 - Q3"), new TreeItem<>("2014 - Q4")); 
treeRoot.getChildren().get(3).getChildren().addAll(
     new TreeItem<>("Branch"), new TreeItem<>("Course")); 

for(String str : loadBranchData()) { 
    treeRoot.getChildren().get(0).getChildren().add(
     new TreeItem<>(str)); 
} 
for(String str : loadCourseData()) { 
    treeRoot.getChildren().get(2).getChildren().add(
     new TreeItem<>(str)); 
} 
for(int c = 0; c <= 2; c++) { 
    treeRoot.getChildren().get(c).setExpanded(true); 
} 

treeRoot.setExpanded(true); 
tree.setPrefWidth(PREFWIDTH); 
tree.setRoot(treeRoot); 
tree.setShowRoot(true); 
tree.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){ 
    @Override 
    public TreeCell<String> call(TreeView<String> p) { 
     return new EpicTreeCell(); 
    } 
}); 
... 
    private final class EpicTreeCell extends TreeCell<String> { 
     @SuppressWarnings("unchecked") 
     super.setOnMouseClicked(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent evt) { 
       System.out.println("TEST?"); 
      } 
     });  
    } 
+0

청취자는 실제로 btw를 작동시키고, 출력하기 위해 "TEST"를 인쇄합니다. – Taerus

답변

4

를 호출해야합니다.

private final class EpicTreeCell extends TreeCell<String> { 

    public EpicTreeCell() { 
     setOnMouseClicked (
       new EventHandler<MouseEvent>() { 
        @Override 
        public void handle(MouseEvent evt) { 
         System.out.println("TEST?"); 
        } 
       } 
     ); 
    } 

    @Override 
    public void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 

     if (empty) { 
      setText(null); 
     } else { 
      setText(getItem() == null ? "" : getItem().toString()); 
     } 
     setGraphic(null); 
    } 
} 

은 자세한 내용은 "Custom Java-fx cellfactory messes up the setCellValueFactory"를 참조하십시오.

+0

감사합니다. 이전에 재정의 된 updateItem()을 가졌지 만 잘못된 내용을했을 가능성이 큽니다. 무리 감사! – Taerus

관련 문제