Ответ 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();
}
});