JavaFX проблемы с TableView на различных объектах

122
31 марта 2019, 20:50

Есть SplitPane, в которую я вложил TableView. И появляются некоторые вопросы.
1. TableView должна подстраиваться под разные типы объектов (в настоящий момент 3, планирую больше). После переключения на одну из вкладок TreeView генерируется стирается предыдущая и генерируется новая таблица на одном и том же TableView. Это хорошее решение или возможно его как-то улучшить/изменить?
2. Окрашивание строк. Я хочу залить строки цветом лишь той таблицы, которая соответствует только одному из моих объектов. Но "окрашиватель" идёт на каждую таблицу и постоянно генерирует исключение несовместимости объектов. Может, я допускаю ошибку при реализации окрашивателя?

tableView.setRowFactory(rows -> new TableRow<MyClass>() {
            @Override
            protected void updateItem(MyClass item, boolean empty) {
                TreeItem<String> nValue = (TreeItem<String>) treeView.getSelectionModel().getSelectedItem();
                if (nValue.getValue().equals("String")) {
                    if (item != null) {
                        if (!item.isActive()) {
                            setStyle("-fx-background-color: darkorange; -fx-text-background-color: black;");
                        } else {
                            setStyle("-fx-background-color: white; -fx-text-background-color: black;");
                        }
                    }
                }
                super.updateItem(item, empty);
            }
        }); 

3. Всё тот же окрашиватель. По идее, он должен менять цвет строки при нажатии на неё(потому что item.isActive меняет своё значение при нажатии), но такого не происходит. и я немного не понимаю, почему так происходит. Что тут не так?

Answer 1
  1. TableView должна подстраиваться под разные типы объектов

Уточните этот момент, не совсем понятно.

UPDATE. Судя по комментарию, что у вас разные классы MyClass1, MyClass2 и тд и тп., необходимо

  1. Либо выделить из этих сущностей одну общую и ей оперировать ( Например, обозвав SuperMyClass и параметрезировав тогда этим классом объект TableView)
  2. Либо для каждого класса создавать отдельную таблицу, которая будет параметризирована своим классом.
  1. Но "окрашиватель" идёт на каждую таблицу и постоянно генерирует исключение несовместимости объектов

Приведите код, потому что тоже не совсем понятно

  1. но такого не происходит. и я немного не понимаю,

Вся суть в том, что в методе updateItem(MyClass item, boolean empty) вам сначала необходимо вызвать super.updateItem(item, empty), а уже потом писать свою логику.

READ ALSO
Задача на создание функции JS [закрыт]

Задача на создание функции JS [закрыт]

Написать функцию, которая принимает три параметра n1, n2 и n3 где число n1 – стартовое число массива, n2 - количество элементов массива, n3 – количество...

142
Как получить переменную [дубликат]

Как получить переменную [дубликат]

На данный вопрос уже ответили:

152