Создание композитного фокуса в 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();
    }
});
Другие вопросы по тегам