javaswing中的绝对定位图像图标

javaswing中的绝对定位图像图标,java,swing,css-position,imageicon,Java,Swing,Css Position,Imageicon,因此,我试图为我的项目编写一个使用JavaSwing的3个不同的口袋妖怪之间的战斗。然而,阻碍我的部分是动画。我尝试使用带有setLocation的空布局,以便根据计时器移动图像图标,但问题是,正如您可能知道的,图像图标不会显示在空布局中。是否有任何方法可以改变它,使其以这种方式工作。 我就是这样宣布我的照片的 java.net.URL torterraPic = getClass().getResource("torterra-1.gif"); ImageIcon torterra = ne

因此,我试图为我的项目编写一个使用JavaSwing的3个不同的口袋妖怪之间的战斗。然而,阻碍我的部分是动画。我尝试使用带有setLocation的空布局,以便根据计时器移动图像图标,但问题是,正如您可能知道的,图像图标不会显示在空布局中。是否有任何方法可以改变它,使其以这种方式工作。 我就是这样宣布我的照片的

java.net.URL torterraPic = getClass().getResource("torterra-1.gif");

ImageIcon torterra = new ImageIcon(new ImageIcon(torterraPic).getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT));
然后,我将图像图标放在一个JLabel中,并将其添加到帧中,然后设置位置以选择其位置

我理解不鼓励使用绝对定位,但我觉得这是最好的方法(假设可以添加图片),因为这样我可以操纵设置位置,使其在攻击期间向上移动。我尝试过使用gridbag和GridLayout来做这件事,但两者都不方便我

所以,如果有什么方法可以锻炼,请告诉我。 提前谢谢

我尝试使用带有setLocation的空布局,以便根据计时器移动图像图标,但问题是,正如您可能知道的,图像图标不会显示在空布局中

是的,他们会,但您现在负责执行布局管理器功能,这意味着您需要设置标签的位置和大小

通常,您会执行以下操作:

label.setIcon(...);
label.setSize( label.getPreferredSize() ):
label.setLocation(...);

然后在动画中,您只需根据需要更改位置。

无需使用空布局和组件绝对定位,因为您的图像精灵不应该是JLabel或其他组件,而是创建BuffereImage精灵,然后根据绘画教程在单图形JPanel的paintComponent方法中绘制它们--

首先在静态位置绘制背景图像,然后通过
g.drawImage(…)
override的x和y参数移动精灵的位置。通过使用ActionListener的Swing计时器或通过其他侦听器(如键绑定)驱动动画。

“但是,使我停滞的部分是动画。”DYM图像是动画(多帧)GIF,或者代码正在移动图像(或两者,或其他)?