2014-01-07 144 views
0

我得到了一個TreeView。 對於此TreeView中的每個條目,如果此TreeItem變大,我會動態添加一堆其他TreeItem。 (通過ChangeListenerexpandedPropertyJavaFX TreeItems未正確對齊

但通過代碼自動擴展一些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上測試了它。我想你應該檢查你的代碼。自從一年以來,我在應用程序中使用了相當複雜的樹狀視圖,我們從未發現任何縮進問題。

+0

我發佈的代碼以及代碼在我的應用程序中產生,我描述的weired結果。不管是否使用javafx 2.2或javafx 8.真奇怪的事情... – nZeloT