帮助! paintComponent 问题

标签 java swing rotation paintcomponent

我是 Java 新手,每天都在学习新事物。 我正在尝试学习如何获取两个不同的 .png 文件并使用绘画组件分别旋转它们。 我能够使两个图像都绘画并具有单独的运动,但是旋转功能似乎无法将每个 2DGraphic 变量识别为独立的。

两个图像都将旋转到最后一个“.rotate”角度。我在网上查过,但每个涉及旋转图形的教程都只处理一张图像。这很好用。我只是无法让两张图片以不同的方式旋转。我希望 P1GFX 与 P2GFX 分开旋转。

这是代码。 此代码有效,但它们都旋转到最后一个 .rotate 指定的任何位置。

public void paintComponent(Graphics frogp1) {


            Graphics2D P1GFX = (Graphics2D)frogp1;
            Graphics2D P2GFX = (Graphics2D)frogp1;
            P1GFX.rotate(90, 150 / 2, 150 / 2);
            P2GFX.rotate(40, 50, 50);
            P1GFX.drawImage(p1.getImage1(), p1x, p1y,this);
            P2GFX.drawImage(p2.getImage2(), p2x, p2y, this);


}

所以,我尝试在 paintComponent 中制作多个参数!那应该行得通吗?没有! 此代码根本不显示任何图像!当 paintComponent 中有多个参数时,屏幕上不会绘制任何东西!

public void paintComponent(Graphics frogp1, Graphics frogp2) {


            Graphics2D P1GFX = (Graphics2D)frogp1;
            Graphics2D P2GFX = (Graphics2D)frogp2;
            P1GFX.rotate(90, 150 / 2, 150 / 2);
            P2GFX.rotate(40, 50, 50);
            P1GFX.drawImage(p1.getImage1(), p1x, p1y,this);
            P2GFX.drawImage(p2.getImage2(), p2x, p2y, this);


}

所以我想,嘿!也许我需要制作不止一个 paintComponent!当然,如果不重新创建我自己的 repaint() 方法实例,这是不可能的。

public void paintComponent1(Graphics frogp1) {
            Graphics2D P1GFX = (Graphics2D)frogp1;
            P1GFX.rotate(90, 150 / 2, 150 / 2);
            P1GFX.drawImage(p1.getImage1(), p1x, p1y,this);

}
public void paintComponent2(Graphics frogp2) {
            Graphics2D P2GFX = (Graphics2D)frogp2;
            P2GFX.rotate(90, 150 / 2, 150 / 2);
            P2GFX.drawImage(p2.getImage2(), p2x, p2y,this);

}

这使得 repaint() 什么都不做,因此什么也没有绘制。

请帮助我旋转多个图像/Graphics2D 变量!

最佳答案

Graphics2D P1GFX = (Graphics2D)frogp1;
Graphics2D P2GFX = (Graphics2D)frogp1;

转换对象意味着您仍在使用相同的对象引用。

如果你想要两个独立的 Graphics 对象,那么你需要这样做:

Graphics2D p1gfx = (Graphics2D)frogp1.create();
Graphics2D p2gfx = (Graphics2D)frogp1.create();

然后当您完成使用的 Graphics 对象时:

p1gfx.dispose();
p2gfx.dispose();

我更改变量名称以遵循 Java 命名约定。变量名不要全部使用大写字符。

关于帮助! paintComponent 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23177999/

相关文章:

java - 为什么在使用弱引用时需要找一个和监听对象生命周期完全一致的对象?

java - 是否可以将 null 参数传递给 Java JPA 2.1 中的存储过程?

java 数据输出流 getOutputStream() getInputStream()

java - JLabel 和 JCheckBox 更改它们之间的空间

java - 使 JFormattedTextField 接受多于 3 位的小数

c++ - 当图像在 C++ 中处于直立位置时,我如何停止不断旋转

iphone - 如何横向显示一个 UIView?

java - 为什么无法向sqlite中插入数据?

java - 如何解决 swing 监听器内存泄漏?

iphone - 要求 iphone 设备方向刷新