无法在javafx tableview中显示布尔属性

d7v8vwbk  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(536)

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

javafx tableview未在所有列中显示数据(2个答案)
上个月关门了。
我正在尝试将包含汽车对象的数组存储在.dat文件中,然后读取它们并显示在tableview上。它在很大程度上起作用,但我的car类中的一个特定布尔字段“isavailable”拒绝显示,并给出如下错误:

WARNING: Can not retrieve property 'isAvailable' in PropertyValueFactory: javafx.scene.control.cell.PropertyValueFactory@7e09765f with provided class type: class model.rental.car.Car
java.lang.IllegalStateException: Cannot read from unreadable property isAvailable

我的汽车等级:

public class Car implements Serializable {

    private String plateNo;
    private String model;
    private CarType type;
    private Boolean isAvailable;

    public Car(String plateNo, String model, CarType type, Boolean isAvailable) {
        this.plateNo = plateNo;
        this.model = model;
        this.type = type;
        this.isAvailable = isAvailable;
    }

初始化tableview的值:

public void initialize(URL arg0, ResourceBundle arg1) {
        platNoCol.setCellValueFactory(new PropertyValueFactory<Car, String>("plateNo"));
        modelCol.setCellValueFactory(new PropertyValueFactory<Car, String>("model"));
        typeCol.setCellValueFactory(new PropertyValueFactory<Car, CarType>("type"));
        availabilityCol.setCellValueFactory(new PropertyValueFactory<Car, Boolean>("isAvailable"));

        carTableView.setItems(carList);
    }

上面的“carlist”是一个可观察的列表。我是通过从dat文件中获取一个list对象来实现的,该文件存储了一个car[]数组,如下所示:

public static List<Car> loadCarDB(String fileName) {
        List<Car> carList = new ArrayList<Car>();
        try {
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("carDB.dat"));
            carList = Arrays.asList((Car[]) in.readObject());
            in.close();
        } catch (FileNotFoundException e) {
            System.out.println("Car database file not found.");
        } catch (EOFException e) {
        } catch (IOException e) {
            System.out.println("Error when processing car database.\n" + e);
        } catch (ClassNotFoundException e) {
            System.out.println("No car data in database.");
        }
        return carList;
    }

然后把它转换成一个可观察列表如下:

ObservableList<Car> carList = FXCollections.observableArrayList(model.FileProcessing.loadCarDB("../carDB.dat"));

我用这种方式做大多数事情的主要原因是因为这些都是为这个项目提供的指导。在tableview中显示布尔值的正确方法是什么?

tcomlyy6

tcomlyy61#

感谢@abra帮我解决这个问题。
添加 public Boolean getIsAvailable() {return isAvailable} 方法修复了这个问题。为了简单起见,我让我的方法返回isavailable字段(也称为isavailable),但我不知道这样使用tableview寻找getter方法。

相关问题