javafx:tableview仍为空(“illegalstateexception:无法从不可读的属性读取”)

yhqotfr8  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(274)

这个问题在这里已经有答案了

javafx tableview未在所有列中显示数据(2个答案)
访问javafx tableview/tablecolumn中的嵌套属性(1个答案)
昨天关门了。
我没有成功地用数据填充tableview,尽管我以前用完全相同的方法(在我看来……)管理它。
(顺便问一下:有没有一种方法可以在一列中显示一个对象,而不是我在tableview中呈现的类中引用的对象(比如favoritebook),而是这个对象的属性对象(比如favoritebook的标题)?谢谢!)
我的主要课程:

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

import java.util.ArrayList;

public class Main extends Application {

    Student student1 = new Student(0, "Jennifer", new Book("JavaFX for Dummies"));
    Student student2 = new Student(1, "John", new Book("Cooking with Jamie Oliver"));
    Student student3 = new Student(2, "Barbara", new Book("Jokes from Germany"));
    ObservableList<Student> studentsObservable = FXCollections.observableArrayList(student1, student2, student3);

    public static void main (String[] args) {

        launch (args);
    }

    public void start (Stage primaryStage) throws Exception {

        TableColumn<Student, Integer> idCol = new TableColumn<>("id");
        TableColumn<Student, String> nameCol = new TableColumn<>("name");;
        TableColumn<Student, Book> favoriteBookCol = new TableColumn<>("favoriteBook");;
        TableView tableView = new TableView();
        tableView.getColumns().setAll(idCol, nameCol, favoriteBookCol);

        idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
        nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
        favoriteBookCol.setCellValueFactory(new PropertyValueFactory<>("favoriteBook"));

        tableView.setItems(studentsObservable);

        HBox root = new HBox();
        root.getChildren().add(tableView);
        Scene scene = new Scene (root);
        primaryStage.setScene(scene);
        primaryStage.show();

    }
}

课程包括学生和书本:

public class Student {
   Integer id;
   String name;
   Book favoriteBook;

   public Student (Integer id, String name, Book favoriteBook) {
       this.id = id;
       this.name = name;
       this.favoriteBook = favoriteBook;
   }
}
public class Book {
   String title;

   public Book (String title) {
       this.title = title;
   }
}

非常感谢您的努力和时间!

暂无答案!

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

相关问题