Создание композитного фокуса в SWT
Можно ли создать фокусируемый композит в SWT? Я перехватываю все события клавиатуры через фильтр отображения, но есть некоторые проблемы, когда фокус находится на дереве или списке - действие GTK+ по умолчанию - поиск в содержимом элемента управления.
Я хочу смешать SWT и AWT с фокусируемым компонентом AWT. Мне удалось сделать виджет AWT не сфокусированным, и я добавил фильтр отображения, чтобы компонент AWT получал события клавиатуры (но не напрямую), даже если он не сфокусирован. Но есть несколько проблем, когда некоторые элементы управления SWT сфокусированы - поэтому я хочу сделать композитный фокус.
Итак, мой последний вопрос: возможно ли сделать композитный фокус SWT?
1 ответ
Если Composite
содержит дочерние виджеты, действие по умолчанию - отказаться от фокуса при его выборе. Чтобы обойти это, начните с расширения Composite
класс как таковой:
class FocusableComposite extends Composite
{
public FocusableComposite(Composite parent, int style)
{
super(parent, style);
}
public boolean setFocus()
{
return super.forceFocus();
}
}
Тогда используйте MouseListener
на новом экземпляре FocusableComposite для вызова setFocus() непосредственно всякий раз, когда Composite
нажата:
Composite composite = new FocusableComposite(shell, SWT.NONE);
composite.addMouseListener(new MouseAdapter()
{
public void mouseDown(MouseEvent event)
{
((Composite)event.widget).setFocus();
}
});