将observablelist绑定到treetableview项

dxpyg8gm  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(267)

我正试着把头绕过去 TreeTableViews 我在这方面做得很糟糕。
所以我有一个后台任务,它获取我想在应用程序中使用的数据 TreeTableView ,我不知道如何填充它,例如将treetableview的项属性绑定到任务的 valueProperty . 我试着四处看看,但似乎找不到一个足够简单的例子来说明我在寻找什么。这可能是因为我的理解能力差,所以如果我能从这里得到一个解释,我将不胜感激。
主要类别:

public class App extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("scene.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
}

scene.fxml

<StackPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal"
           xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.sample.Scene">
    <TreeTableView fx:id="tblPerson" prefHeight="200.0" prefWidth="200.0">
      <columns>
          <TreeTableColumn fx:id="colName" prefWidth="75.0" text="Name">
              <cellValueFactory>
                  <TreeItemPropertyValueFactory property="name"/>
              </cellValueFactory>
          </TreeTableColumn>
          <TreeTableColumn fx:id="colLikes" prefWidth="75.0" text="Likes">
              <cellValueFactory>
                  <TreeItemPropertyValueFactory property="like"/>
              </cellValueFactory>
          </TreeTableColumn>
      </columns>
    </TreeTableView>
</StackPane>

型号:

public class Person {
    private String name;
    private String like;

    public Person(String name, String like) {
        this.name = name;
        this.like = like;
    }

    public String getName() {
        return name;
    }

    public String getLike() {
        return like;
    }
}

背景工作者:

public class GetPeopleService extends Service<ObservableList<TreeItem<Person>>> {
    @Override
    protected Task<ObservableList<TreeItem<Person>>> createTask() {
        return new GetPeopleTask();
    }

    private static class GetPeopleTask extends Task<ObservableList<TreeItem<Person>>> {
        @Override
        protected ObservableList<TreeItem<Person>> call() throws Exception {
            ObservableList<TreeItem<Person>> myList = FXCollections.observableArrayList();
            //person name should be root node
            myList.addAll(
                    new TreeItem<>(new Person("Foo", "reading")),
                    new TreeItem<>(new Person("Foo", "writing")),
                    new TreeItem<>(new Person("Bar", "cycling")),
                    new TreeItem<>(new Person("Bar", "swimming")),
                    new TreeItem<>(new Person("Alice", "reading"))
            );
            return myList;
        }
    }
}

控制器类

public class Scene implements Initializable {
    @FXML
    private TreeTableView<Person> tblPerson;

    GetPeopleService service = new GetPeopleService();

    @Override
    public void initialize(URL location, ResourceBundle resources) {
      //tblPerson.itemsProperty().bind(....)
      service.start();
    }
}

我想做点东西让那个人 name 属性是根节点,可以将其展开以查看它们的相似项。从上面的例子来看,我们有3个顶级节点,foo、bar和alice。他们所有的喜好都显示在扩展上。
非常感谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题