1

我正在制作一个应用程序,它是某种绘图程序,为此我试图在外壳中使用 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 ,但它对这个问题没有影响。

如何解决此行为?

4

0 回答 0