2015-04-19 2 views
3

Я пытаюсь реализовать MultipleSelectionModel для GridView ControlsFX. Изучая интернет, Джонатан Джайлс отметил, что для добавления слушателей в каждый GridCell было добавлено a bad idea. Это заставило меня задаться вопросом, как уведомить модель выбора событий, такую ​​выборку, отбор и т. Д. Прежде чем читать это, я подумал, что узел, используемый в GridCell, будет потреблять событие мыши/касания/клавиши и использовать метод GridCells Selected соответственно. Мой вопрос здесь в том, что это обновление распространяется на любые слушатели/модели вообще или мне нужно связать его (где-то) вручную, что я не знаю, как это сделать в данный момент.Правильный способ реализации JavaFX 'SelectionModel для представления, у которого его нет

Кроме того, в моделях выбора используется наблюдаемый список только для чтения, что ставит еще одну проблему с тем, как привязать данные GridView (то есть список элементов) к списку модели выбора, который, как я полагаю, является тем, что использует модель для своих процессов ,

Я мог бы вообще обойти с использованием модели выбора и перехватить входные события на уровне Cell/Node и делать такие вещи, как подсветка в методе updateItem ячейки, при использовании Backerv ObservableList или 2 для отслеживания всего, и обновить соответственно, но это не лучший способ, а тем более хороший. Модель выбора для GridView должна быть единственным способом, поэтому я здесь.

ответ

2

Вам необязательно использовать MultiSelectionModel или любой другой JavaFX. Достаточно использовать Set или List для хранения выбранных вами узлов.

Вот пример из How to select multiple components of Canvas using ctrl key in javafx? с ответом от меня. Думаю, это покрывает ваши потребности. Если нет, укажите, что вам нужно.

+0

Это действительно хороший ответ, Роланд, и то, что я тоже собирался сделать. Дело только в том, что поток, который я связал выше, дал мне паузу, потому что это исходит от одного из авторов ControlsFX, который также является большим вкладчиком OpenJDK и других крупных проектов. Я реализую GridView в элементе управления, где потенциальные пользователи сходят с ума от того, что собирают массивные изображения изображений в одном месте. Я бы хотел, чтобы я был самым результативным, и я не возражаю, если это тоже самое сложное. Я отвечу на ваш ответ, когда придет время, если ничего не придет. –

+0

Ну, я использовал более 1000 узлов и до сих пор не получил проблемы с производительностью. Зависит от ваших требований. В качестве альтернативы вы можете поместить один прослушиватель в базовую панель и найти нужный узел, как только вы нажмете на панели. Но если ваши пользователи записывают много изображений, я думаю, вы могли бы столкнуться с проблемой памяти. – Roland

+0

Это полезно знать. Спасибо :) 1000 - это всего лишь царапина на поверхности для пользователей, о которых я упоминал (и они просто не любят делить вещи в подпапки), но я знаю, что это можно смягчить, только создавая то, что можно увидеть на самом деле. Я действительно хочу использовать GridView, потому что его макет автоматически настраивается на измерение родителя, что экономит мне время на то, чтобы реализовать что-то свое, если только я не поставил вещи в жесткой (колоночной) схеме, как 1 в вашем решении. Было бы здорово услышать от команды ControlsFX, так как они сказали, что согласятся с представлениями для GridView с помощью sel. модель. –

 Смежные вопросы

  • Нет связанных вопросов^_^