Подтвердить что ты не робот

Создание композитного фокуса в SWT

Можно ли создать в SWT настраиваемый композит? Я улавливаю все события клавиатуры через фильтр дисплея, но есть некоторые проблемы, когда фокус находится в дереве или списке. Действие по умолчанию GTK + заключается в поиске содержимого элемента управления.

Что я хочу сделать, так это смешать SWT и AWT с настраиваемым компонентом AWT. Мне удалось сделать виджет AWT нецелесообразным, и я добавил фильтр дисплея, чтобы компонент AWT получал события клавиатуры (но не напрямую), даже если он не фокусировался. Но есть несколько проблем, когда сосредоточены некоторые элементы управления SWT - почему я хочу сделать композитный фокус.

Итак, мой последний вопрос: возможно ли сделать SWT-композицию фокусной?

4b9b3361

Ответ 1

Если a 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();
    }
});