使复合材料在 SWT 中可聚焦

2022-09-02 14:08:53

是否可以在SWT中创建可聚焦的复合材料?我正在通过显示过滤器捕获所有键盘事件,但是当焦点位于树或列表上时会出现一些问题 - GTK +的默认操作是在控件的内容中搜索。

我想做的是将SWT和AWT与可聚焦的AWT组件混合在一起。我设法使AWT小部件无法聚焦,并添加了显示过滤器以使AWT组件接收键盘事件(但不是直接),即使它没有聚焦。但是,当某些 SWT 控件聚焦时,存在几个问题 - 这就是为什么我想使复合可聚焦。

所以我的最后一个问题是:是否有可能使SWT复合可聚焦?


答案 1

如果 包含子构件,则默认操作是在选择时放弃焦点。要避免这种情况,请首先按如下方式扩展类:CompositeComposite

class FocusableComposite extends Composite
{
    public FocusableComposite(Composite parent, int style)
    {
        super(parent, style);
    }

    public boolean setFocus()
    {
        return super.forceFocus();
    }
}

然后在 FocusableComposite 的新实例化上使用 a,每当单击 时直接调用 setFocus():MouseListenerComposite

Composite composite = new FocusableComposite(shell, SWT.NONE);

composite.addMouseListener(new MouseAdapter()
{
    public void mouseDown(MouseEvent event)
    {
        ((Composite)event.widget).setFocus();
    }
});

答案 2