2014-11-05 4 views
0

2 개의 TreeView가 있고 첫 번째 항목에 항목이 채워집니다.TreeView가 체크 상자 상태보다 우수함

try { 
    CheckBoxTreeItem<String> treeRoot = new CheckBoxTreeItem<String>("Root"); 
    treeRoot.setExpanded(true); 

    for (int i = 1; i <= 20; i++) { 
     item = new CheckBoxTreeItem<String>("item " + i); 
     treeRoot.getChildren().add(item); 
    } 

    treeView.setRoot(treeRoot); 
    treeView.setCellFactory(CheckBoxTreeCell.<String> forTreeView()); 
    treePane.add(treeView, 0, 1); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

확인란을 선택한 항목을 내 두 번째 트리로 전송하려고합니다. 루트 항목을 선택하면 모든 하위 항목을 두 번째 트리에 추가해야합니다. 하위 뿌리도 마찬가지입니다.

나는 이런 식으로 시도했지만 작동하지 않습니다.

int length = treeView.getExpandedItemCount(); 

CheckBoxTreeItem<String> treeRoot = new CheckBoxTreeItem<String>("On the other side"); 
treeRoot.setExpanded(true); 

try { 
    for (int i = 1; i <= length; i++) { 
     item = (CheckBoxTreeItem<String>) (treeView.getTreeItem(i)); 
     if (item.isSelected()) { 
      treeRoot.getChildren().add(item); 
     } 

    } 
    treeView.setRoot(treeRoot); 
    treePaneExecution.add(treeView, 0, 1); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

어떤 조언을 주시면 감사하겠습니다.

답변

1

selectedProperty()CheckBoxTreeItem 인 청취자를 등록하고 선택한 상태가 변경되면이 청취자를 이동하십시오. 여기에 간단한 예가 있습니다. 사용자가 트리 루트를 확인할 때해야 할 일을 파악해야합니다. 첫 번째 트리가 비어 있어야합니다. 원하는 동작이 내게 명확하지 않습니다.하지만이 작업으로 시작해야합니다.

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBoxTreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.control.cell.CheckBoxTreeCell; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 

public class MovingCheckedTreeItems extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     CheckBoxTreeItem<String> uncheckedTreeRoot = new CheckBoxTreeItem<>("Unchecked tree"); 
     uncheckedTreeRoot.setExpanded(true); 
     TreeView<String> uncheckedTree = new TreeView<>(uncheckedTreeRoot); 
     uncheckedTree.setCellFactory(CheckBoxTreeCell.forTreeView()); 

     CheckBoxTreeItem<String> checkedTreeRoot = new CheckBoxTreeItem<>("Checked tree"); 
     checkedTreeRoot.setExpanded(true); 
     TreeView<String> checkedTree = new TreeView<>(checkedTreeRoot); 
     checkedTree.setCellFactory(CheckBoxTreeCell.forTreeView()); 

     for (int i=0; i<20; i++) { 
      CheckBoxTreeItem<String> item = new CheckBoxTreeItem<>("Item "+(i+1)); 
      item.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> { 
       item.getParent().getChildren().remove(item); 
       if (isNowSelected) { 
        // add to checkedTree, will take all sub-nodes with it... 
        checkedTreeRoot.getChildren().add(item); 
       } else { 
        // add to uncheckedTree 
        uncheckedTreeRoot.getChildren().add(item); 
       } 
      }); 
      uncheckedTreeRoot.getChildren().add(item); 
     } 

     HBox root = new HBox(5, uncheckedTree, checkedTree); 
     Scene scene = new Scene(root, 800, 600); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 나는 이미 다른 논리를 사용하여 제대로 작동하게했습니다. 고맙겠 :) –