JavaFX TableView реализует режим «выбора линии» - PullRequest
2 голосов
/ 27 апреля 2020

Я сейчас нахожусь в процессе создания шестнадцатеричного редактора с JavaFX, точнее его kotlin родного TornadoFX (что, к сожалению, означает, что я ограничен JavaFX 8). Чтобы избежать повторного изобретения колеса * Я решил поместить свои двоичные данные в старый добрый TableView.

К сожалению, поведение выбора по умолчанию (с включенным выбором ячеек) не подходит для моего использования. дело. По умолчанию «выбор диапазона» (нажатие клавиши Shift) создает то, что я бы назвал «выбором блока»:

Block selection

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

Line selection

Мой вопрос: что бы быть лучшим способом для реализации этого поведения?

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

  1. Присоединить слушателя изменений к наблюдаемому списку, возвращаемому getSelectedCells, и вручную добавить дополнительные ячейки, которые должны быть выбраны. .

  2. Реализация собственной версии TableViewSelectionModel. Это, очевидно, будет наиболее гибким вариантом, но поскольку я не могу создать подкласс реализации по умолчанию , это приведет к массовому дублированию кода. Насколько я знаю, мне нужно только переопределить метод selectRange, точнее это для -l oop.

  3. Реализация TableViewSelectionModel, что делегирует все, кроме selectRange, экземпляру реализации по умолчанию (возможно, полученной путем отражения). Это приводит к гораздо меньшему количеству дублирования кода, чем в варианте 2, но все же требует копирования и вставки большей части метода selectRange, только с измененным значением a-l oop.

Я терпеть не могу программирование, ориентированное на копирование и вставку, поэтому я не большой поклонник вариантов 2 и 3. Хотя первый вариант кажется очень «схематичным», он изменяет список выбора, все еще обрабатывая исходные события изменения. Хотя я в этой области очень люблю JavaFX, поэтому вполне возможно, что это совершенно нормально, или, может быть, есть другой (очень простой) способ сделать это, который я пропустил до сих пор.

Любой помощь будет принята с благодарностью!


* Некоторые из моих причин для использования таблицы:

  • Не изобретать "UI-привязку" ( отображаются обновленные результаты)
  • Не заново изобретать обработку 'щелчка' (положение мыши)
  • Не заново изобретать обработку выделения (кроме этих изменений)
  • TornadoFX's datagrid Компонент выполнен ужасно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...