Java EclipseSWT列表小部件在Mac上窗口未聚焦之前不会重新绘制

Java EclipseSWT列表小部件在Mac上窗口未聚焦之前不会重新绘制,java,eclipse,widget,swt,Java,Eclipse,Widget,Swt,我创建了一个简单的SWT应用程序,它有两个列表小部件 左侧是列表中可供选择的一些值。 当您双击其中一个时,它将添加到右侧的列表中 在Windows上,这可以正常工作。 但当我在Mac上试用时,我发现右边的列表只会在应用程序离焦后更新 我不明白为什么会这样 import java.util.stream.IntStream; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse

我创建了一个简单的SWT应用程序,它有两个列表小部件

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

在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, 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, SWT.FILL);
        panel.setLayout(new GridLayout(2, 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();
    }
}

你试过使用joda time吗?调用
rightList.redraw()rightList之后添加code>。添加
可以修复它,但这不是必需的。您是否在Eclipse中运行此功能?我在macOS上看到过这样的问题,从Eclipse内部运行时会发生这种情况,但作为独立应用程序运行时不会发生这种情况。@greg-449谢谢-我无法确认这种情况是否发生在Eclipse外部,但您的解决方法对我来说是可行的。