Java SWT转换错误
今天我遇到了SWT转换代码的一些奇怪行为。问题是,当我尝试使用Java SWT转换错误,java,eclipse,graphics,rotation,swt,Java,Eclipse,Graphics,Rotation,Swt,今天我遇到了SWT转换代码的一些奇怪行为。问题是,当我尝试使用变换将坐标系旋转45度时。旋转(45f),然后绘制矩形的轮廓,它会绘制移动的矩形。 考虑下面的绘制旋转矩形的代码: ... m_canvas.addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent a_e) { GC gc = a_e.gc;
变换将坐标系旋转45度时。旋转(45f)
,然后绘制矩形的轮廓,它会绘制移动的矩形。考虑下面的绘制旋转矩形的代码:
...
m_canvas.addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent a_e)
{
GC gc = a_e.gc;
Transform t = new Transform(gc.getDevice());
t.rotate(m_angle);
gc.setTransform(t);
gc.setForeground(fgcolor);
gc.setBackground(bgcolor);
gc.drawRectangle(rect);
}
});
...
此外,我们还有两个按钮,用于将角度增加和减少一度。现在使用该按钮将矩形从0旋转到90度,并查看45度左右的情况。请注意,如果我尝试使用
GC.fillRectangle()
,则填充矩形将正确旋转和绘制。GC.drawRectangle()方法的问题。
这就是它看起来的样子:
课程的完整代码可用
带有Eclipse项目源代码的可运行JAR(用于win32)将通过请求发布,因为我没有足够的声誉。
我是做错了什么,还是这个问题有解决办法?多亏了Baz,我在2008年找到了一个帖子。
不幸的是,没有修复方法,但有两种解决方法:
- 在应用转换之后和绘制之前,将GC数据状态掩码设置为
DRAW\u OFFSET
:
GC.getGCData().state |=1,这真是奇怪。可能值得将此作为一个bug发布。+1很高兴看到您找到了“解决方案”。令人遗憾的是,仍然没有适当的解决办法。我的意思是,这是基本的绘图,在这里不起作用。。。