如何解决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 举报,一经查实,本站将立刻删除。