Я сейчас нахожусь в процессе создания шестнадцатеричного редактора с JavaFX, точнее его kotlin родного TornadoFX (что, к сожалению, означает, что я ограничен JavaFX 8). Чтобы избежать повторного изобретения колеса * Я решил поместить свои двоичные данные в старый добрый TableView
.
К сожалению, поведение выбора по умолчанию (с включенным выбором ячеек) не подходит для моего использования. дело. По умолчанию «выбор диапазона» (нажатие клавиши Shift) создает то, что я бы назвал «выбором блока»:
Однако, поскольку данные в моей таблице следует интерпретировать как непрерывную строку байтов (например, текст), я хочу что-то вроде этого:
Мой вопрос: что бы быть лучшим способом для реализации этого поведения?
Я не смог найти какие-либо существующие (с открытым исходным кодом) реализации, что, я думаю, имеет смысл, потому что я не могу представить, что это является общим требованием для таблицы. До сих пор я думал о трех способах сделать это:
Присоединить слушателя изменений к наблюдаемому списку, возвращаемому getSelectedCells
, и вручную добавить дополнительные ячейки, которые должны быть выбраны. .
Реализация собственной версии TableViewSelectionModel
. Это, очевидно, будет наиболее гибким вариантом, но поскольку я не могу создать подкласс реализации по умолчанию , это приведет к массовому дублированию кода. Насколько я знаю, мне нужно только переопределить метод selectRange
, точнее это для -l oop.
Реализация TableViewSelectionModel
, что делегирует все, кроме selectRange
, экземпляру реализации по умолчанию (возможно, полученной путем отражения). Это приводит к гораздо меньшему количеству дублирования кода, чем в варианте 2, но все же требует копирования и вставки большей части метода selectRange
, только с измененным значением a-l oop.
Я терпеть не могу программирование, ориентированное на копирование и вставку, поэтому я не большой поклонник вариантов 2 и 3. Хотя первый вариант кажется очень «схематичным», он изменяет список выбора, все еще обрабатывая исходные события изменения. Хотя я в этой области очень люблю JavaFX, поэтому вполне возможно, что это совершенно нормально, или, может быть, есть другой (очень простой) способ сделать это, который я пропустил до сих пор.
Любой помощь будет принята с благодарностью!
* Некоторые из моих причин для использования таблицы:
- Не изобретать "UI-привязку" ( отображаются обновленные результаты)
- Не заново изобретать обработку 'щелчка' (положение мыши)
- Не заново изобретать обработку выделения (кроме этих изменений)
- TornadoFX's
datagrid
Компонент выполнен ужасно