2014-01-07 4 views
0

TreeView가 있습니다. 이 TreeView의 모든 항목에이 TreeItem이 확장되면 다른 TreeItems를 동적으로 추가합니다. (를 통해 ChangeListenerexpandedProperty에) JavaFX TreeItem이 올바르게 정렬되지 않았습니다.

그러나 코드를 통해 자동으로 일부 TreeItems을 확장 한 후

, 그들은 늘 올바르게 정렬 얻을, 나는 이런 식으로 뭔가 얻을 : 위로 스크롤 한 후와 조금 아래로

enter image description here

을 , 나는 때때로, 그것은 맞았고 때로는 더 나 빠졌다는 것을 알았다.

해결 방법을 알고 계십니까? 또는 버그입니까?

편집 :이 코드는 완벽하게 정상적으로 잘 작동

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.Scene; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 


public class TreeViewTest extends Application { 

    public static void main(String[] args) { 
    launch(args); 
    } 
    @Override 
    public void start(Stage stg) throws Exception { 
    final TreeView<String> tree = new TreeView<String>(); 

    TreeItem<String> root = new TreeItem<String>("Root"); 

    genChilds(root, 50); 

    tree.setRoot(root); 

    BorderPane pane = new BorderPane(); 
    pane.setCenter(tree); 

    TreeItem<String> leaf = root; 
    for(int j = 0; j < leaf.getChildren().size() && leaf.getChildren().size() != 0; j++){ 
     System.out.println("b"); 
     if(Math.random() < 0.5){ 
     leaf = leaf.getChildren().get(j); 
     leaf.setExpanded(true); 
     tree.getSelectionModel().select(leaf); 
     } 
    } 

    stg.setScene(new Scene(pane)); 
    stg.show(); 
    } 

    protected int depth(TreeItem<String> selectedItem) { 
    return 0; 
    } 

    private void genChilds(final TreeItem<String> leaf, final int count) { 
    for(int i = 0; i < count; i++){ 
     final int nr = i; 
     leaf.getChildren().add(new TreeItem<String>("" + i)); 
     leaf.getChildren().get(i).expandedProperty().addListener(new ChangeListener<Boolean>() { 
     @Override 
     public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean newV) { 
      if(newV){ 
      leaf.getChildren().get(nr).getChildren().remove(0); 
      genChilds(leaf.getChildren().get(nr), count-1); 
      }else{ 
      leaf.getChildren().get(nr).getChildren().clear(); 
      leaf.getChildren().get(nr).getChildren().add(new TreeItem<String>("")); 
      } 
     } 
     }); 

     //End at some Point 
     if(count-1 > 0) 
     leaf.getChildren().get(i).getChildren().add(new TreeItem<String>("")); 
    } 
    } 

} 
+0

사용중인 JavaFX의 버전은 무엇입니까? 문제를 재현하는 간단한 예제를 게시 할 수 있습니까? – assylias

+0

현재 JFX 2.2를 사용하고 있습니다. – nZeloT

+0

이상한 점 : 현재이 문제에 직면하고 있으며 샘플 코드로 재생산 할 수 없습니다. 귀하가 제공 한 코드는 나를 위해 문제를 재현하지 않습니다. 지금까지 이것에 대한 해결책을 찾았습니까? – geisterfurz007

답변

0

:이 코드를 재현한다

. Javafx 2.2에서 테스트했습니다. 아마도 코드 내부를 확인해야한다고 생각합니다. 우리의 응용 프로그램에서 꽤 복잡한 treeview를 1 년 이래로 사용하고 있는데, 들여 쓰기 문제를 전혀 발견하지 못했습니다.

+0

필자가 게시 한 코드와 내 애플리케이션의 코드가 생성 한 결과, 필자가 설명한 결과가 우위에 있습니다. 아무리 내가 javafx 2.2 또는 javafx 8 사용하고 있습니다. 정말 이상한 일이 ... – nZeloT

관련 문제