2013-07-10 5 views
2

Всякий раз, когда я создаю экземпляр CheckBoxTreeView, для него требуется TreeItem с . Нет выбранных детей. TreeItems будет unselected. Как мне это изменить? Я попытался позвонить setIndependent (true) на родительский TreeItem, но он все равно должен иметь по крайней мере один проверенный дочерний TreeItem, который нужно проверить.JavaFX выбирает элемент CheckBoxTreeView без выбора детей?

Я попытался создать пользовательский TreeCell с флажками в качестве графического изображения, но не смог понять, как сохранить элемент от сброса. Эта проблема опубликована здесь: https://stackoverflow.com/questions/17606280/javafx-2-checkbox-in-treecell-keeps-resetting-cant-bind-it

ответ

1

Я думаю, ваша проблема в том, что при расширении или возобновлении части дерева TreeView создает новый CustomCheckBoxCell, который по умолчанию не выбран. Вы можете отслеживать свой CustomCheckBoxCell в массиве и передавать их в TreeView, когда он им нужен. Я не смог ее решить.

Однако Я могу показаться немного очевидным, и вы, возможно, уже пробовали это, но почему бы не использовать объекты TreeItem<CheckBox> и добавить их в свой TreeView?

Я попытался воспроизвести вашу проблему в следующем коде, скажите, правильно ли я понял.

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.CheckBoxTreeItem; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 


public class CheckBoxTreeView extends Application{ 

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     CheckBoxTreeItem<CheckBox> rootItem = 
       new CheckBoxTreeItem<CheckBox>(new CheckBox("root")); 
     rootItem.setExpanded(true);     

     final TreeView<CheckBox> tree = new TreeView<CheckBox>(rootItem); 
     tree.setEditable(true); 

     for (int i = 0; i < 8; i++) { 

      System.out.println("new tree Item"); 
      final TreeItem<CheckBox> checkBoxTreeItem = 
        new TreeItem<CheckBox>(new CheckBox(GeoObj.toString())); 
      rootItem.getChildren().add(checkBoxTreeItem);     
     } 

     tree.setRoot(rootItem); 
     System.out.println("root item set"); 
     tree.setShowRoot(true); 

     StackPane root = new StackPane(); 
     root.getChildren().add(tree); 
     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 

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

} 

Первая буква ваших типов должны быть в верхнем регистре в соответствии с принципами хорошей ... Тогда geoObj -> GeoObj customCheckBoxCell-> CustomCheckBoxCell

+0

Спасибо! Я сделал что-то подобное на самом деле, я все еще использовал TreeItem , но просто установил графику в CheckBox и сделал код для обработки выбора/отмены выбора детей. –

 Смежные вопросы

  • Нет связанных вопросов^_^