2017-06-13 7 views
0

TreeViewを動的に作成し、TreeViewから一部のCheckBoxTreeItemを選択するには、データベースからデータを取得する必要があります。このTreeViewは、メニュー構造に対する権限を表します。javafx CheckBoxTreeItemプログラムで親を更新する

TreeViewを作成し、ユーザーのアクセス許可に従ってツリーから特定の項目をプログラムで選択すると、親項目にステータス変更(selectedまたはindeterminate)が含まれていないことに疑いがあります。しかし、インターフェースから直接アイテムを選択すると、親が更新されます。例えば

私はプログラムで項目を選択すると、ここで私は私の画面を持っている:

enter image description here

あなたは、私が選択した2つのメニュー項目を持っていますが、親ではないことがわかります。

この画像では、画面を使用して同じメニュー項目を選択しました。サブメニュー内のすべての子を選択すると、両親はindeterminateステータスまたはselectedに更新されました。

enter image description here

私はグーグル、文書化を経て、ここでスタックオーバーフローではなく、子供だけを更新する例を発見しました。

親がプログラムで更新されたり、アイテムが選択されたときに画面から実行されるイベントを呼び出す方法はありますか?

EDIT:ツリーから

すべての項目はfalseに設定independent性質を持っています。

答えて

0

この問題の回避策がありました。ある場合

private void selectItems(){ 
    TreeItem root = tree.getRoot(); 
    if (root != null) { 
     selectChildren(root); 
    } 
} 

private void selectChildren(TreeItem<TesteVO> root){ 
    for(TreeItem<TesteVO> child: root.getChildren()){ 
     // HERE I CHECK IF THE USER HAS PERMISSION FOR THE MENU ITEM 
     // IF SO, I CHANGE THE SELECTED PROPERTY TO TRUE 
     if (child.getValue().id == 4) { 
      ((CheckBoxTreeItem) child).setSelected(true); 
     } 

     // IF THERE ARE CHILD NODES, KEEP DIGGING RECURSIVELY 
     if(!child.getChildren().isEmpty()) { 
      selectChildren(child); 
     } 
    } 
} 

TreeItemのを確認するためのコードをここで

Platform.runLater(new Runnable() { 
    @Override 
    public void run() { 
     selectItems(); 
    } 
}); 

さ: 私は最初にすべてのTreeView構造体を作成し、このコードスニペットを使用した後selectedプロパティを変更する必要がありました簡単な方法は、私に教えてください!

関連する問題