平移/旋转/移动图形对象而不会弄乱整个屏幕



我正在编写一个GUI,它将进行一些图形转换/旋转等。

我的问题是,当我尝试翻译我的图形时,

(a)整个屏幕翻译而不是我的一个小绘画区域

(b) 旧油漆留在那里,留下一个大的油漆斑点而不是翻译后的图像

(c) 如果我使用 clearRect 方法让我避免 (b),整个屏幕变白,(a) 仍然是一个问题

我的DrawPanel类(无论出于何种原因,我称之为"LaunchTubeImage")

private class LaunchTubeImage extends JPanel {
    private Color colour;

    public LaunchTubeImage(Color color) {
        super();
        this.colour = color;
    }
    public void paintComponent(Graphics g) {
        Graphics2D gg = (Graphics2D)g;
        double theta = (double)angle.getValue(); 
        theta = Math.toRadians(theta);
        gg.rotate(theta,tubeImage.getSize().width/2 + 10,
            tubeImage.getSize().height - 50);
        g.setColor(colour);
        g.clearRect(0,0,getWidth(),getHeight());
        g.fillRect(tubeImage.getSize().width/2,
            tubeImage.getSize().height - 100 , 10, 50);
    }
}

在我的代码中调用它的地方

tubeImage = new LaunchTubeImage(Color.MAGENTA);

angle.addChangeListener(new ChangeListener(){
    public void stateChanged(ChangeEvent e) {
        tubeImage.repaint();
    }
});

案例 1:注释掉我发布的第一个代码块中的clearRect

http://i58.tinypic.com/2d1l5w2_th.png黑色背景如愿以偿。尚未旋转。到目前为止看起来不错。

http://oi60.tinypic.com/1zw1sm.jpg用我的JSpinner旋转了它...您会看到之前的位置没有被删除(请注意我的按钮如何随机加倍并将自己放在屏幕顶部)。

案例 2:保持clearRect方法

oi57.tinypic.com/2s84307.jpg到目前为止,布局很好,但我希望背景是黑色的

oi57.tinypic.com/4rde8x.jpg耶!它旋转了。但是请注意出现在我右上角的随机"15"的奇怪行为

oi58.tinypic.com/vymljm.jpg最后...当我调整窗口大小时,您会看到我的整个屏幕都旋转了 - 而不仅仅是我想旋转的粉红色图像

提示/修复/建议?谢谢!!我希望我提供了足够的信息(附言,如果您坚持要求我们提出清晰/有用的问题......然后不要限制您可以发布的图像数量...:/)

重写

paintComponent方法的第一行通常应为super.paintComponent(g) 。在 JPanel 上,这将导致使用背景色清除绘图区域。如果你想用不同的颜色清除背景,你可以通过手动填充一个矩形来做到这一点(不鼓励clearRect,请参阅 JavaDoc),但当然,这必须在应用任何转换之前完成。

所以你的方法可能看起来像这样:

@Override 
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(colour);
    g.fillRect(0,0,getWidth(),getHeight());
    Graphics2D gg = (Graphics2D)g;
    double theta = (double)angle.getValue(); 
    theta = Math.toRadians(theta);
    gg.rotate(theta,tubeImage.getSize().width/2 + 10,tubeImage.getSize().height - 50);
    gg.fillRect(tubeImage.getSize().width/2,tubeImage.getSize().height - 100 , 10, 50);
}

相关内容

  • 没有找到相关文章

最新更新