|
|
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Добрый день. Столкнулся со следующей трудностью, которую не могу решить: Есть TableView (на скрине верхняя правая таблица, пока пуста) Пытаюсь ее заполнить. Предполагаю, что колонок в ней всегда будет 2, и она будет перезаполняться автоматически при клике по строкам нижней таблицы. Заполнять хочу условно говоря, транспонируя данные из нижней таблицы в верхнюю, в 2 колонки. для это таблички созданы следующие переменные: Код: java 1. 2. 3. 4. 5. 6. 7. 8. в методе инициализации выставил следующий листенер: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. листинг .fxml файла Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. может кто подсказать, что я делаю не так? как нужно обвернуть данные, чтобы они корректно отображались в таблице? Если вопрос не ясно изложил, уточните, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 15:12 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Вам нужно разобраться в том что в JavaFX всё построено на биндингах и в том чтобы начать читать документацию. Вот тут сказано что именно конструктор потребляет в качестве параметра. https://docs.oracle.com/javafx/2/api/javafx/scene/control/cell/PropertyValueFactory.html#PropertyValueFactory(java.lang.String) Вы назначение этого класса, похоже не поняли. Данные же к таблице биндятся через TableView.items. Вы это свойство где-то используете вообще для верхней таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 16:11 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Я бы подсказал решение, если бы понимал что вообще нужно. tableRows.getColumns().get(0).getText() - всегда одно и тоже значение, зачем его менять внутри слушателя. Вообще слушатели это наследие Swing. В JavaFX если что-то можно привязать, то лучше привязать, а не делать слушателя. Вам нужно просто связать TableView.SelectionModel.selectedItem одной таблицы к TableView.items другой таблицы. Единственная проблема что надо как-то трансформировать значение. Вот тут я не знаю какой способ оптимальнее, так как с JavaFX не работаю особо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 16:17 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, к сожалению, я действительно не понял назначение класса PropertyValueFactory, это уже оконечный пример из других примеров, в которых я искал ответ. tableRows.getColumns().get(0).getText() - это значение тоже переменчиво. Это первая колонка нижней таблички (первая просто для примера проверки себя). В свою очередь нижняя перезаполняется из TreeView, тоже слушателем. Но она динамическая, т.к. количество колонок в ней заранее неизвестно. В общем, данные меняются. Как я понял из документации, вставка элементов items делается когда заполнение идет динамическим путем, т.е. в цикле например. А для варианта со статичными колонками я должен указать "фабрику заполнения ячеек" (если английский не подводит) Вопрос мой фактически можно переформулировать так: как для метода FieldName.setCellValueFactory() обвернуть строку со значением, чтобы она стала совместима с ожидаемым типом объекта? Про итемы пойду еще покурю доку. может всетаки недопонял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 16:51 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Назначение CellValueFactory это взять из items значение применяет к нему эту CellValueFactory чтобы получить из объекта текст для отображения в ячейку. Это трансформатор объекта строки в текст ячейки. авторtableRows.getColumns().get(0).getText() - это значение тоже переменчиво. Оно не зависит от выбора в таблице, но меняется при смене выбора зачем-то. авторкак для метода FieldName.setCellValueFactory() обвернуть строку со значением, чтобы она стала совместима с ожидаемым типом объекта? Его не надо "оборачивать". Его надо вернуть Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 17:13 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
В вашем случае можно написать так Код: java 1. 2. Но лично я не считаю это красивым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 18:42 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Но, в items надо какую-нибудь фигню положить всё равно. Иначе строк не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 18:44 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Но, в идеале, нужно завести новый JavaFX объект, который будет строкой (item) в верхней таблице. А свойства этого объекта уже прибиндить к tableView.selectionModel.selectedItem.yourDomainProperty ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 18:58 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
wolfioА для варианта со статичными колонками я должен указать "фабрику заполнения ячеек" в дизайнере Open with SceneBuilder рисуешь колонки и табличку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 19:23 |
|
||
|
заполнение TableView таблички
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за затяжной ответ. Сурсов под рукой не было. Blazkowicz, вы оказались правы на счет итемов. Класть я их должен был. BlazkowiczЕго не надо "оборачивать". Его надо вернуть Код: java 1. Дело в том, что в таком варианте вы возращаете в качестве параметра String, а ожидается ObservableString<>, поэтому я и спрашивал как бы строку обвернуть. Попробовав и ваш способ стал, на который компилятор тоже ругается, уже искать ответы по тексту ошибки. Нашел вот такое описание на StackOverflow. Тут как раз описаны 2 способа, один из которых по вашему некрасивый :) Правда второй вариант нужен, если мне данные потребуется поменять в таблице, но т.к. я просто читаю, то обошелся простым вариантом. Кстати, почему вы считаете этот код плохим? BlazkowiczВ вашем случае можно написать так FieldName.setCellValueFactory(() -> tableRows.getColumns().get(0).getText()); FieldValue.setCellValueFactory(() -> tableRows.getSelectionModel().getSelectedItem().get(0)); Но лично я не считаю это красивым. как я понял, установка свойства заполнения в инициализации как раз и является эталонным способом бинда, согласно документации? BlazkowiczНо, в идеале, нужно завести новый JavaFX объект, который будет строкой (item) в верхней таблице. А свойства этого объекта уже прибиндить к tableView.selectionModel.selectedItem.yourDomainProperty В идеале, наверное нужно создавать объект, конечно, но я подумал, что т.к. я могу кликать по разным строкам и перезаполнять таблицу, то в случае если бы я создавал динамичную колонку, например, это привело бы к бОльшей утечке памяти, чем в текущем варианте. Возможно, я ошибаюсь тут? В итоге, черновой вариант, который работает примерно как я ожидал, выглядит вот так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. он конечно заполняет только первую строку, для примера, но хоть работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 11:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39630035&tid=2122121]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
3ms |
| others: | 12ms |
| total: | 180ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...