CheckBox가있는 노드가 몇 개있는 TreeView가 있습니다 (MWE 참조).TreeView를 축소/확장하면 CheckBox가 무작위로 검사됩니다.
일부 노드를 축소/확장 할 때 다른 노드의 CheckBoxes가 선택되거나 선택 해제됩니다.
문제를 재현하려면 모든 노드를 확장하고 ChildA
을 확인하고 Block1
및 ChildC
접두사가 자동으로 선택되어 있는지 확인하십시오.
package treeviewexample;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.control.cell.CheckBoxTreeCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TreeViewExample extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
/* example Treeview */
TreeView tw = new TreeView();
TreeItem rootNode = new TreeItem("Root");
TreeItem blockOne = new TreeItem("Block1");
TreeItem childA = new TreeItem("ChildA");
TreeItem childB = new TreeItem("ChildB");
blockOne.getChildren().add(childA);
blockOne.getChildren().add(childB);
TreeItem blockTwo = new TreeItem("Block2");
TreeItem childC = new TreeItem("ChildC");
TreeItem childD = new TreeItem("ChildD");
blockTwo.getChildren().add(childC);
blockTwo.getChildren().add(childD);
rootNode.getChildren().add(blockOne);
rootNode.getChildren().add(blockTwo);
tw.setRoot(rootNode);
/* add CheckBoxes */
tw.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
root.getChildren().add(tw);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
이 동작을 어떻게 막을 수 있습니까? 나중에 프로그램에서 TreeView를 통해 노드의 상태 (체크 여부)를 얻고 싶습니다.
인해 TreeCell이 IndexedCell에서 확장한다는 사실에, 각 TreeCell 또한 인덱스 속성을 제공합니다 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TreeCell.html에서
나는 다음 알고있다. 셀이 확장되거나 축소되면 인덱스가 업데이트되므로 모델 인덱스가 아닌 뷰 인덱스로 간주되어야합니다.
이렇게 의도 된 동작입니까? 왜 누군가는 그것을 갖고 싶어 할까?