【发布时间】:2015-11-22 12:22:53
【问题描述】:
各位程序员大家好!
所以说实话,我不确定标题问题是否正确,你会明白为什么。 在我解释我做什么以及为什么之前,这里是代码 sn-p:
JPanel playerPanel = new JPanel() {
public void paint(Graphics g) {
X = 1;
Y = 1;
g.drawImage(player.getScaledInstance(player.getHeight()/2, player.getWidth()/2, Image.SCALE_DEFAULT), X, Y, null);
}
};
所以这是我制作的自定义类的 sn-p,我的问题是,你看到有一个 X 和 Y 变量,我可以更改它们的值,但这对实际程序的影响没有任何改变,我的第一个问题是我可以更改此 JPanel 图像的 X 和 Y,如果可以,我如何“刷新”实际的 JPanel/Image 使其看起来像移动了?
一些注意事项:
-the X, Y are global variables
-playerPanel is inside a procedure, and a global variable
-i can access X, Y since they are global variables from outside the class
我很难真正写下我的问题......希望你明白我想要完成什么。
【问题讨论】:
-
1.覆盖
paintComponent(),而不是paint()2. 在paintComponent()的开头调用super.paintComponent()3. 不要在paintComponent()方法内设置x/y 坐标。 4. 您可以通过调用panel.repaint()强制面板重新绘制 5. 变量名称(不是最终的)应该以小写字母开头 6. 可以使用timer 来完成动画,例如,您可以在其中更改值每次运行 x/y。 -
谢谢!老实说,我在搞乱矩形,在我的项目中,我创建了一个图像加载类,它一旦被调用,就会将选择的图像加载到一个新的 JPanel 中(从 sn-p 可以看到),这个 JPanel 在里面类,我将 x/y 坐标设置为全局的,所以我可以从类外部访问它,所以有“imageLoaded”对象,我想用“imageLoaded.X = insert_coordinate_here”更改图像的坐标,这就是为什么我这样做是因为我可以在主框架上使用 KeyListener 移动面板,并制作另一个“loadedImage(2)”
-
我制作了 3 个矩形,第一个矩形位于 loadedImage 的坐标处,大小相同,第二个矩形与 loadedImage2 相同,第三个矩形是两者的交点。 loadImage2 直到有一个交叉点才“可见”,只有交叉点可见。现在一切正常,但是每当我移动loadedImage1时,它都会显示交叉点,但不正确,因为它总是(并且仅)显示图像的左上角,然后我发现,我必须移动面板本身的图像,这就是我的意思
-
正在尝试完成...... repaint() 方法没有帮助。再次感谢您的评论和建议!
-
好的,现在一切正常,我不知道为什么 .repaint() 不起作用,现在一切都完美了 :) 再次感谢!
标签: java image swing jpanel paint