java swing中的绝对定位图像图标

时间:2018-04-25 02:38:07

标签: java swing css-position imageicon

所以我试图为我的项目写一个基本上是使用java swing的3个不同的口袋妖怪之间的口袋妖怪之战。然而,阻碍我的部分是动画。我尝试使用带有setLocation的null布局,以便我可以根据计时器移动图像,但问题是,您可能知道,图像将不会显示在空布局中。无论如何要改变它以便它将以这种方式工作。 这就是我宣布我的照片的方式

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

ImageIcon torterra = new ImageIcon(new ImageIcon(torterraPic).getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT));

然后我将我的图像图标放在JLabel中,我将其添加到框架中,然后我将setLocation选择它来进行选择。

我知道不鼓励使用绝对定位,但我觉得这是最好的方法(假设可以添加图片),因为这样我可以操纵setLocation使其在向上移动攻击。我曾尝试使用gridbag和网格布局来尝试这样做,但对我来说都不方便。

所以,如果有什么方法可以进行这项训练,请告诉我。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

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

首先在静态位置绘制背景图像,然后通过g.drawImage(...)覆盖的x和y参数移动精灵的位置。通过Swing Timer驱动动画,Swing Timer使用ActionListener或其他侦听器,如Key Bindings。

答案 1 :(得分:0)

  

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

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

通常你会做类似的事情:

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

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