JavaFX TableView事件只被触发一次?

时间:2014-08-13 07:43:44

标签: java javafx javafx-2 java-8 javafx-8

我想从JavaFX TableView获取所选行。奇怪的是,当我点击一次行时,事件会被触发,但不是第二次或第三次。为什么?还有另一种处理此事件的方法(例如,带有@FXML注释的正常事件处理程序)?

public PersonController {

    private ObservableList<Person> personData = FXCollections.observableArrayList();

    @FXML
    private TableView<Person> personTable;
    @FXML
    private TableColumn<Person, String> firstNameColumn;
    @FXML
    private TableColumn<Person, String> lastNameColumn;

    @FXML
    private void initialize() {
        personTable.getSelectionModel().selectedItemProperty().addListener(
            (observable, oldValue, newValue) -> {
                if (personTable.getSelectionModel().getSelectedItem() != null) {
                        showPersonDetails(newValue);
                }
        });
    }

}

FXML

<TableView fx:id="personTable" layoutX="14.0" layoutY="14.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
    <columns>
      <TableColumn fx:id="firstNameColumn" prefWidth="75.0" text="Vorname" />
      <TableColumn fx:id="lastNameColumn" prefWidth="75.0" text="Nachname" />
    </columns>
     <columnResizePolicy>
        <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
    </columnResizePolicy>
</TableView>

1 个答案:

答案 0 :(得分:1)

找到解决方案。我必须在我的JPA域类中初始化属性 所以而不是:

private IntegerProperty id;

你必须写:

private IntegerProperty id = new SimpleIntegerProperty();