Определение фокуса в SWT - PullRequest
       6

Определение фокуса в SWT

8 голосов
/ 07 января 2011

Я знаю, что могу видеть, имеет ли определенный виджет контроль в SWT, используя isFocusControl(). Однако, когда мой ожидаемый виджет не имеет фокуса, как я могу определить, что делает (другими словами, что убрало фокус)?

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

У меня также возникают проблемы с надежной настройкой фокуса на другой виджет из FocusLost слушателя, если фокус изменяется при событии мыши.

Есть предложения?

Ответы [ 4 ]

13 голосов
/ 07 января 2011

Это:

Display.getFocusControl();
2 голосов
/ 12 августа 2015

Поскольку это сложно, позвольте мне добавить кое-что относительно второй части вопроса:

У меня также возникают проблемы с надежной настройкой фокуса на другой виджет из слушателя FocusLost, если фокус изменяется при событии мыши.

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

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

textfield.addFocusListener(new FocusListener() {            
  @Override
  public void focusLost(FocusEvent e) {
  }         
  @Override
  public void focusGained(FocusEvent e) {
    Display.getCurrent().asyncExec(new Runnable() {
      @Override
      public void run() {
        if (!textfield.isDisposed()) {
          textfield.selectAll();
        }
      }
    }); 
  }
});

Без асинхронного вызова событие мыши отменяет выбор, сделанный в событии фокуса.

2 голосов
/ 07 июня 2012

Как объяснено, Display.getFocusControl () сообщает вам, какой элемент управления имеет фокус.Вы можете связать информацию с виджетами с помощью методов setData ().Вы можете сделать это с каждым элементом управления, который может получить фокус, и тогда getData () должна помочь вам выяснить, какой элемент управления имеет фокус.

В противном случае вы можете просто сохранить указатели на созданные вами элементы управления и сравнить указательк вашим известным контрольным указателям, нет?

1 голос
/ 05 сентября 2012

getFocusControl возвращает элемент управления, и ваш элемент наследуется от элемента управления. Я использую набор пользовательских элементов управления, и когда я получаю фокус, я определяю, какой это класс, используя набор операторов if (control instanceof myclass) (иначе ifs после первого) Затем, когда у меня есть реальный класс, я преобразую его в этот класс и вызываю подходящие методы получения, которые я поместил в свой класс.

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...