JavaFX和表格视图-第一次选择获胜';行不通
我正在开发简单的JavaFX应用程序。在我的主视图中,我有表视图。在行上调用selectedEmployeeDetails()方法。它填充显示员工详细信息(姓名、姓氏等)的标签。当我启动应用程序并选择第一行(仅第一行)时,什么都没有发生。当我选择secound row时,一切正常。然后当我再次选择第一行时,一切正常。这是我在主视图控制器的初始化方法中的代码JavaFX和表格视图-第一次选择获胜';行不通,java,javafx,tableview,Java,Javafx,Tableview,我正在开发简单的JavaFX应用程序。在我的主视图中,我有表视图。在行上调用selectedEmployeeDetails()方法。它填充显示员工详细信息(姓名、姓氏等)的标签。当我启动应用程序并选择第一行(仅第一行)时,什么都没有发生。当我选择secound row时,一切正常。然后当我再次选择第一行时,一切正常。这是我在主视图控制器的初始化方法中的代码 @FXML private void initialize() { dialog.setMaximized();
@FXML
private void initialize() {
dialog.setMaximized();
dialog.setTitle("Test");
this.employeeModel.loadData();
employees = this.employeeModel.getEmployees();
employeeTableView.setItems(employees);
this.employeeFirstName.setCellValueFactory(
new PropertyValueFactory<Employee, String>("name"));
this.employeeFirstName.setCellFactory(TextFieldTableCell.forTableColumn());
this.employeeLastName.setCellValueFactory(
new PropertyValueFactory<Employee, String>("lastname"));
this.employeeLastName.setCellFactory(TextFieldTableCell.forTableColumn());
this.employeeFatherClmn.setCellValueFactory(
new PropertyValueFactory<Employee, String>("fathersName"));
this.employeeFatherClmn.setCellFactory(TextFieldTableCell.forTableColumn());
this.employeeJmbgClmn.setCellValueFactory(
new PropertyValueFactory<Employee, String>("jmbg"));
this.employeeJmbgClmn.setCellFactory(TextFieldTableCell.forTableColumn());
this.employeeContractClmn.setCellValueFactory(
new PropertyValueFactory<Employee, String>("contractType"));
this.employeeContractClmn.setCellFactory(TextFieldTableCell.forTableColumn());
this.employeePositionClmn.setCellValueFactory(
new PropertyValueFactory<Employee, String>("position"));
this.employeePositionClmn.setCellFactory(TextFieldTableCell.forTableColumn());
this.employeeStatusClmn.setCellValueFactory(
new PropertyValueFactory<Employee, String>("status"));
this.employeeStatusClmn.setCellFactory(TextFieldTableCell.forTableColumn());
//employeeTableView.getColumns().addAll(employeeFirstName, employeeLastName);
selectedEmployeeDetails(null);
//Add change listener
employeeTableView.getSelectionModel().selectedItemProperty().addListener((observableValue, oldValue, newValue) -> {
//Check whether item is selected and set value of selected item to Label
if (employeeTableView.getSelectionModel().getSelectedItem() != null) {
selectedEmployeeDetails(newValue);
System.out.println(employeeTableView.getSelectionModel().getSelectedIndex());
}
else
{
System.out.println("EROR");
}
});
}
将项目添加到表中时,第一个项目将立即被选中。这发生在使用选择模型的selected item属性注册侦听器之前,因此不会为初始选择调用侦听器的方法 移动线路
this.employeeModel.loadData();
employees = this.employeeModel.getEmployees();
employeeTableView.setItems(employees);
到
initialize()
方法的末尾,在您使用所选项目注册侦听器之后。谢谢您,James\u D。您是stackoverflow legend:)
this.employeeModel.loadData();
employees = this.employeeModel.getEmployees();
employeeTableView.setItems(employees);