отображение данных в таблице TableView

112
29 декабря 2020, 15:00

Ситуация такая. у меня есть 2 таблицы. В 1-ой хранятся номера договоров, во 2-ой дополнительная информация по выбранному договору из 1-ой таблицы (т.е. когда я выделяю строку из таблицы 1, в таблице 2 могут отобразиться 4 строки относящиеся по выбранному договору, если я выделю другую строку из той же 1-ой таблице, во 2-ой может отобразиться 6 строк) точнее я хочу так сделать, но у меня не получается. Сейчас у меня есть класс MainData там я храню все переменные и коллекцию для отображения информации (переменные отправляются в Label с ними все отлично поэтому их в код не вставляю), есть сам класс контроллер, где все отображается. Суть мольбы о помощи заключается во второй таблице, в первой все хорошо, но если я хочу отравить данные во вторую таблицу, компилятор жалуется и говорит преобразуй данные в ObservableValue<String>, вроде есть какая-то обвертка, что бы мою коллекцию преобразовать в ObservableValue<String> но у меня ничего не получается, помогите с отображением инфы плиз.

Класс MainData

    private final List<String> nameLink;
    public MainData(String numberContract) {
    this.nameLink = FXCollections.observableArrayList();
    }
    public List<String> getNameLink() {
        return nameLink;
    }
    public List<String> setNameLink(String nameLink) {
        this.nameLink.add(nameLink);
        return getNameLink();
    }

Класс контроллер

public class MainController {
    @FXML
    private TableView<MainData> contractTable;
    @FXML
    private TableColumn<MainData, String> numberContractColumn;
    @FXML
    private TableColumn<MainData, String> contractColumn;
    @FXML
    private TableView<MainData> linkTable;
    @FXML
    private void initialize() {
        // Инициализация таблицы.
        numberContractColumn.setCellValueFactory(cellData -> cellData.getValue().numberContractProperty());
        contractColumn.setCellValueFactory(cellData -> cellData.getValue().getNameLink()); //Ошибка именно тут.

Вырезал всю лишнюю инфу как по мне, но если что-то не понятно, добавлю конечно

Answer 1

Если во второй таблице нужно отобразить содержимое, возвращаемое getNameLink(), то на первую таблицу вешаем обработчик выделения элемента:

contractTable.getSelectionModel().selectedItemProperty().addListener((ov, o, n) -> {
        if (n != null) {
            detailsTable.setItems(n.getNameLink());
        }
});

где TableView<String> detailsTable -- вторая таблица.

В MainData nameLink не приводить к List, а использовать ObservableList

    private final ObservableList<String> nameLink = FXCollections.observableArrayList();
    // ObservableList вместо просто List
    public ObservableList<String> getNameLink() {
        return nameLink;
    }
READ ALSO
Передать значение accept в компонент

Передать значение accept в компонент

Необходимо, чтобы при клике на кнопку, окно загрузки файлов открывалось с определенным acceptВ моем примере, accept применяется уже после того,...

136
Нужно создать кнопку в каждом поле таблицы HTML, которые будут взаимодейтсвовать с полями базы данных Postgresql. Делаю на Node JS

Нужно создать кнопку в каждом поле таблицы HTML, которые будут взаимодейтсвовать с полями базы данных Postgresql. Делаю на Node JS

В таблицу HTML выводятся данные из БД PostgresИ рядом с каждым полем должна выводится кнопка "Удалить клиента"

124
Сравнение числа с поля ввода, выводить сообщение на страницу

Сравнение числа с поля ввода, выводить сообщение на страницу

Посмотрите где у меня ошибка в коде, который будет проверять введенное значение, и говорить, сдали вы тест или нет

109
Яндекс карты. Путевые точки

Яндекс карты. Путевые точки

Как скрыть(не удалить) путевые точки и линию маршрута?

112