2017-02-21 25 views
0

Я хочу реализовать MouseEvent в моей NatTable для всех ячеек, которые реализуются через класс ComboBoxCellEditor. Если в поле со списком появляется один клик, открывается раскрывающийся список с записями. Поэтому я зарегистрировал FirstSingleClickBinding в своем UiBindingRegistry.Почему я не могу реализовать CellEditorMouseEventMatcher с определенным CellEditor в Java NatTable?

Я использовал BodyCellEditorMouseEventMatcher, и он отлично работал. Но поскольку этот совпаден не рекомендуется, я больше не хочу его использовать. Поэтому он говорит, что я должен использовать CellEditorMouseEventMatcher, который я пробовал, но он не работает так, как я ожидаю. Документация на CellEditorMouseEventMatcher говорит следующее:

Осуществление {@link IMouseEventMatcher}, которая будет проверять, если редактирование
* должен быть активирован. Для этого можно указать метку региона к
* реагировать, кнопка мыши, которая была использована, чтобы нажать и если редактор
* зарегистрирован в ячейке, на которую мышь нажмите казнили. Если ни один регион
* указан указатель, отображается только кнопка мыши и наличие редактора ячейки
*.

Но я не могу использовать редактор ячеек в качестве параметра, так что означает последнее предложение? У меня есть возможность указывать в качестве параметров кнопку и/или метку области. Как я могу использовать этот EventMatcher для получения того же результата, что и с BodyCellEditorMouseEventMatcher? Я использую разные типы ячеек, поэтому важно, чтобы только поле со списком получало такое поведение.

Вот мой «устаревшим» Код:

private void editCombosOnSingleClick(final UiBindingRegistry uiBindingRegistry) { 
    uiBindingRegistry.registerFirstSingleClickBinding(new BodyCellEditorMouseEventMatcher(ComboBoxCellEditor.class), 
     new MouseEditAction()); 
} 

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо :)

ответ

1

С CellEditorMouseEventMatcher вам не нужно указывать реализацию редактора. Вы указываете только область и кнопку (оба необязательные). Если редактор должен быть открыт или нет, это просто делается, проверяя, есть ли редактор. Тип редактора не имеет значения.

uiBindingRegistry.registerSingleClickBinding(
      new CellEditorMouseEventMatcher(GridRegion.BODY, MouseEventMatcher.LEFT_BUTTON), 
      new MouseEditAction()); 

С BodyCellEditorMouseEventMatcher вам, необходимых для регистрации нового Искателя для каждого редактора вы добавили. Это ошибка дизайна, потому что тип редактора не имеет значения. Контроль того, является ли ячейка редактируемой или нет, выполняется через IEditableRule или даже путем регистрации редактора ячейки.

В конце концов вам необходимо убедиться, что вы либо регистрируете только редакторы для редактируемых ячеек, что, в свою очередь, означает, что вам необходимо настроить конфигурацию, чтобы гарантировать, что TextCellEditor не зарегистрирован в качестве редактора по умолчанию (см. DefaultEditConfiguration). Или вы указываете IEditableRule, который оценивает только true, если тип редактора ComboBoxCellEditor или даже лучше зарегистрировать IEditableRule#ALWAYS_EDITABLE только для того же ярлыка, что и редактор, и по умолчанию IEditableRule#NEVER_EDITABLE.

+0

Спасибо за ваш быстрый ответ! На самом деле почти все ячейки, которые я использую, редактируются. Но я не хочу, чтобы нормальные ячейки попадали в «режим редактирования» каждый раз, когда вы нажимаете на них (и это будет перезаписывать события выбора, которые я думаю). Все поля со списком имеют эту стрелку справа, которая открывает свои записи.Я хочу точно такое же поведение, если вы нажмете на них (так что вам не нужно «стрелять»). Знаете ли вы, как я могу это сделать? – mkaay

+1

Это поведение по умолчанию. Не нужно делать что-то особенное для этого. –

+0

Ох ... так что-то в моем коде перезаписывает эту функциональность ... Спасибо вам большое! :) – mkaay