gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:10:51 25 4
gpt4 key购买 nike

我正在编写一个 GUI,它将执行一些图形平移/旋转等操作。

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

(a) 整个屏幕都会平移,而不是我的一小块绘制区域

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

(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最后...当我调整窗口大小时,您会看到我的整个屏幕都旋转了 - 不仅仅是我想要旋转的粉红色图像

提示/修复/建议?谢谢!!我希望我已经提供了足够的信息(P.s.如果您坚持要求我们提出明确/有用的问题...那么请不要限制您可以发布的图像数量...:/)

最佳答案

重写的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);
}

关于java - 平移/旋转/移动图形对象而不弄乱整个屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com