有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX setCellValueFactory方法调用更多次

我已经创建了一个tableView。但是它的setCellValueFactory方法调用两次或多次。它会引起一个bug。这是什么原因呢?下面是我的Person和Controller类

人。java

public class Person {

private final SimpleStringProperty name;
private final SimpleStringProperty surname;
private final SimpleStringProperty job;
private final BooleanProperty isSelected;

public Person(SimpleStringProperty name, SimpleStringProperty surname, SimpleStringProperty job,
        BooleanProperty isSelected) {
    super();
    this.name = name;
    this.surname = surname;
    this.job = job;
    this.isSelected = isSelected;
}

public SimpleStringProperty getName() {
    return name;
}

public SimpleStringProperty getSurname() {
    return surname;
}

public SimpleStringProperty getJob() {
    return job;
}

public BooleanProperty getIsSelected() {
    return isSelected;
}

}

控制器。java

public class Controller {

@FXML
private final TableView<Person> fxPersonTableView;

@FXML
private final TableColumn<Person, Boolean> fxSelectColumnCheckbox;

@FXML
private final TableColumn<Person, String> fxNameTableColumn;

@FXML
private final TableColumn<Person, String> fxSurnameTableColumn;

@FXML
private final TableColumn<Person, String> fxJobTableColumn;

List<Person> persons;

private void createTableView(){

    fxSelectColumnCheckbox.setCellFactory(CheckBoxTableCell.forTableColumn(fxSelectColumnCheckbox));

    //fxSelectColumnCheckbox.setCellValueFactory(c -> c.getValue().getIsSelected()); I'm using this, but for print wrote below

    fxSelectColumnCheckbox.setCellValueFactory(c -> {

        System.out.println("METHOD: fxSelectColumnCheckbox.setCellValueFactory"); // This is printed two or more times.
        return c.getValue().getIsSelected());

    });

    fxNameTableColumn.setCellValueFactory(c -> persons.get(c).getName());
    fxSurnameTableColumn.setCellValueFactory(c -> persons.get(c).getSurname());
    fxJobTableColumn.setCellValueFactory(c -> persons.get(c).getJob());
    fxPersonTableView.getSelectionModel.setSleectionMode(SelectionMode.MULTIPLE);
    fxPersonTableView.setItems(persons);

}
}

共 (0) 个答案