JavaFX和表格视图-第一次选择获胜';行不通

JavaFX和表格视图-第一次选择获胜';行不通,java,javafx,tableview,Java,Javafx,Tableview,我正在开发简单的JavaFX应用程序。在我的主视图中,我有表视图。在行上调用selectedEmployeeDetails()方法。它填充显示员工详细信息(姓名、姓氏等)的标签。当我启动应用程序并选择第一行(仅第一行)时,什么都没有发生。当我选择secound row时,一切正常。然后当我再次选择第一行时,一切正常。这是我在主视图控制器的初始化方法中的代码 @FXML private void initialize() { dialog.setMaximized();

我正在开发简单的JavaFX应用程序。在我的主视图中,我有表视图。在行上调用selectedEmployeeDetails()方法。它填充显示员工详细信息(姓名、姓氏等)的标签。当我启动应用程序并选择第一行(仅第一行)时,什么都没有发生。当我选择secound row时,一切正常。然后当我再次选择第一行时,一切正常。这是我在主视图控制器的初始化方法中的代码

@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);