我有一个基于SWT的JOGL 2D图表测试,有四个GLCanvas:图例,底轴,左轴和系列。该组件嵌入在SWT Shell中,并定期从具有生成的"信号"的线程更新。
以下是shell的屏幕截图:
如您所见,图例,左轴和系列区域已正确更新,但在创建外壳后底部轴不可见,并且必须调整此外壳的大小以便最终显示底部轴:
以下是显示底部轴(文本)的代码:
bottomAxisAreaGLContext.getGL().getGL2().glColor3f(fontColor.getRed() / 255, fontColor.getGreen() / 255, fontColor.getBlue() / 255);
for (int i = 0; i < verticalGridLinesPositions.size(); i++) {
int position = verticalGridLinesPositions.get(i).intValue();
double value = (i + 1) * (windowTimeWidth) / (verticalGridLinesPositions.size() + 1);
String valueString = decimalFormatter.format(value).replaceAll("E0$", "");
int valueStringLength = glut.glutBitmapLength(getFontNumber(), valueString);
bottomAxisAreaGLContext.getGL().getGL2().glRasterPos3f(position - valueStringLength / 2, getBottomAxisHeight() / 2 - getFontHeight() / 2, 0);
glut.glutBitmapString(getFontNumber(), valueString);
}
使用类似的方法显示左轴。
我不明白为什么必须调整Shell的大小才能显示底部轴。
为什么它适用于所有其他GLCanvas而不适用于底轴GLCanvas?
请问好吗?
答案 0 :(得分:0)
确保更新Shell的Thread具有以下结构:
new Thread() {
public void run() {
//your logic...
display.asyncExec(new Runnable() {
public void run() {
if (shell.isDisposed())
return;
shell.redraw();
}
});
}
}.start();