我正在制作一个应用程序,它是某种绘图程序,为此我试图在外壳中使用 SWT 和 GLCanvas 小部件。这是它的一个片段,显示了我遇到的问题:
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 ,但它对这个问题没有影响。
如何解决此行为?