Как реализовать редактирование строки в TableView через заранее созданное окно редактирования?

Чтобы реализовать редактирование строки в TableView через заранее созданное окно редактирования в Java, вам потребуется выполнить следующие шаги:

1. Создайте класс, который представляет модель данных вашего TableView. Этот класс должен содержать поля, соответствующие столбцам таблицы. Например, если ваша таблица содержит столбцы "Имя", "Фамилия" и "Возраст", ваш класс модели данных может выглядеть следующим образом:

public class Person {
    private String name;
    private String surname;
    private int age;

    // конструктор, геттеры и сеттеры для полей класса
}

2. Создайте экземпляр класса TableView и определите столбцы, используя методы setCellFactory для каждого столбца. Внутри каждого метода setCellFactory вы должны создать экземпляр класса TableCell и переопределить метод updateItem, чтобы отобразить данные из модели данных в ячейке таблицы. Например:

TableView<Person> tableView = new TableView<>();

TableColumn<Person, String> nameColumn = new TableColumn<>("Имя");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

TableColumn<Person, String> surnameColumn = new TableColumn<>("Фамилия");
surnameColumn.setCellValueFactory(new PropertyValueFactory<>("surname"));

TableColumn<Person, Integer> ageColumn = new TableColumn<>("Возраст");
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));

tableView.getColumns().addAll(nameColumn, surnameColumn, ageColumn);

3. Создайте окно редактирования (например, класс EditWindow), которое будет отображать текущие данные для выбранной строки. Добавьте компоненты, такие как текстовые поля или комбо-боксы, чтобы позволить пользователю изменять данные. Обратите внимание, что вам также понадобится кнопка "Сохранить" (или аналогичная), чтобы разрешить пользователю сохранить изменения.

4. Установите слушатель на событие, когда строка в TableView выбрана (например, метод setOnMouseClicked). В этом слушателе вы должны получить данные выбранной строки и передать их в окно редактирования. Например:

tableView.setOnMouseClicked(event -> {
    if (event.getClickCount() == 2) {
        Person selectedPerson = tableView.getSelectionModel().getSelectedItem();
        if (selectedPerson != null) {
            EditWindow editWindow = new EditWindow(selectedPerson);
            // Отобразите окно редактирования
        }
    }
});

5. В окне редактирования, когда пользователь нажимает "Сохранить", вы должны обновить модель данных (строку в TableView) с новыми значениями. Для этого вы можете использовать метод set предоставляемый классом ObservableList, который является источником данных для TableView. Например:

editWindow.getSaveButton().setOnAction(event -> {
    String newName = editWindow.getNameTextField().getText();
    String newSurname = editWindow.getSurnameTextField().getText();
    int newAge = Integer.parseInt(editWindow.getAgeTextField().getText());

    // Обновить модель данных
    selectedPerson.setName(newName);
    selectedPerson.setSurname(newSurname);
    selectedPerson.setAge(newAge);

    // Закрыть окно редактирования
    editWindow.close();
});

6. Наконец, когда происходит обновление модели данных, TableView будет автоматически обновлен, чтобы отобразить новые значения.