Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT转换错误_Java_Eclipse_Graphics_Rotation_Swt - Fatal编程技术网

Java 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;

今天我遇到了SWT转换代码的一些奇怪行为。问题是,当我尝试使用
变换将坐标系旋转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很高兴看到您找到了“解决方案”。令人遗憾的是,仍然没有适当的解决办法。我的意思是,这是基本的绘图,在这里不起作用。。。