Eclipse SWT List Widget不会重新绘制,直到窗口在Mac上不再聚焦

问题描述

我创建了一个简单的SWT应用程序,其中包含两个List小部件。

左侧是一些可供选择的值。 双击其中之一时,它将添加到右侧列表中。

在Windows上,这可以正常工作。 但是当我在Mac上试用时,发现右侧列表仅在应用程序散焦后才会更新。

我不知道为什么会这样吗?

import java.util.stream.IntStream;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;

public class ListWidgetRefreshTest {
    public static void main(final String[] args) {
    new Dialog((Shell) null) {
        @Override
        protected Control createDialogArea(final Composite parent) {
        final Composite composite = (Composite) super.createDialogArea(parent);

        // Create layout
        // Two column layout
        composite.setLayout(new FillLayout(SWT.VERTICAL));

        final Composite container = new Composite(parent,SWT.FILL);
        container.setLayout(new GridLayout(2,false));

        final Composite leftRightPanel = new Composite(container,SWT.FILL);
        leftRightPanel.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,2,1));

        final GridLayout layout = new GridLayout(2,true);
        layout.marginHeight = 0;
        layout.marginWidth = 0;

        leftRightPanel.setLayout(layout);

        // Add items
        // Left side
        Composite panel = new Composite(leftRightPanel,SWT.FILL);
        panel.setLayout(new GridLayout(2,false));
        final List leftList = new List(panel,SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
        IntStream.rangeClosed(1,3).mapToObj(String::valueOf).forEach(leftList::add);
        // Right side
        panel = new Composite(leftRightPanel,false));
        final List rightList = new List(panel,SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);

        leftList.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDoubleClick(final MouseEvent e) {
            for (final String selection : leftList.getSelection()) {
                rightList.add(selection);
            }
            }
        });

        return composite;
        }
    }.open();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...