我正在创建一个类似绘图程序的应用程序,为此我尝试在shell中使用带有GLCanvas小部件的SWT。这是它的一个片段,显示了我遇到的问题:
shell = new Shell();
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
shell.setLayout(gridLayout);
shell.setSize(1000, 800);
shell.setText(APPLICATION_NAME);
Label label = new Label(shell, SWT.NONE);
label.setText("Test");
Composite composite = new Composite(shell, SWT.NONE);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
composite.setLayoutData(gridData);
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
GLData data = new GLData();
data.doubleBuffer = true;
canvas = new GLCanvas(composite, SWT.NO_BACKGROUND, data);
当我从此代码调整窗口大小时,它无法正常显示。 GLCanvas闪烁,但它也好像在绘图中的一个步骤,它将GLCanvas绘制到屏幕上,然后再调整大小以正确填充剩余的空白区域。这具有这样的效果,例如,当窗口调整到左侧时,GLCanvas比它应该小。相反,当窗口调整到右侧时,GLCanvas比它应该大,并延伸到窗口的右侧。
我已经尝试将画布的样式从SWT.NONE设置为SWT.NO_BACKGROUND到SWT.DOUBLE_BUFFERED到SWT.NO_REDRAW_RESIZE,它对此问题没有影响。
如何解决此问题?