2017-04-11 6 views
0

ちょっと私はのJavaFXでツリービューの子に機能を関連付ける方法

はので、私は私と複数のルートを持つツリービューを持っているのJavaFXやGUI構築に新しいですし、各ルートが持つ複数の子ノード

@FXML 
TreeView<String> bro; 

TreeItem<String> root=new TreeItem<>("root"); 
TreeItem<String> child = new TreeItem<>("child"); 
TreeItem<String> child2 = new TreeItem<>("child"); 
TreeItem<String> child3 = new TreeItem<>("child"); 
TreeItem<String> child4 = new TreeItem<>("child"); 
TreeItem<String> child5 = new TreeItem<>("child"); 

public void initialize(){ 

root.getChildren().add(child); 
     root.getChildren().add(child2); 
     root.getChildren().add(child3); 
     root.getChildren().add(child4); 
     root.getChildren().add(child5); 
     root.setExpanded(true); 
bro.setRoot(root); 

} 

ので以来initialiseiを関連付けるか、私はchild2の

public void openWindow(){ 
    // code to open new window 
} 

毎回のchild2の上でクリックしたときに実行されますが、私は、Liだろうクリックされたことを持っているfucntionとchild2のバインドしたいと思いきとして、ツリービューそれが可能であれば私もchild2のが選択されているときに知っていただきたいと思い

を実行するための新しいウィンドウが開きますKE openwindow()機能

私はマウスに対応するために、このに

おかげ

+0

クリックするたびに?またはそれが選択されるたびに? –

+0

がクリックされました –

答えて

0

をどのように行うのか細胞上のクリック、あなたが細胞にイベントハンドラを追加できるように、TreeView上のセルファクトリを設定します。

bro.setCellFactory(tv -> { 
    TreeCell<String> cell = new TreeCell<String>() { 
     @Override 
     protected void updateItem(String item, boolean empty) { 
      super.updateItem(item, empty); 
      setText(item); 
     } 
    }; 

    cell.setOnMouseClicked(e -> { 
     if (cell.getTreeItem() == child2) { 
      openWindow(); 
     } 
    }); 

    return cell ; 
}); 

アイテムがいつ選択されたかを知るには、ツリーの選択モデルの選択されたアイテムプロパティでリスナーを登録します。

関連する問題