代码之家  ›  专栏  ›  技术社区  ›  Hursh Jha

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

  •  -2
  • Hursh Jha  · 技术社区  · 6 年前

    因此,我试图为我的项目编写一个使用java swing的3个不同口袋妖怪之间的口袋妖怪之战。然而,阻碍我的部分是动画。我尝试使用带有setLocation的null布局,以便根据计时器移动imageicons,但问题是,正如您可能知道的那样,imageicons不会显示在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中,并将其添加到框架中,然后设置位置以选择其位置。

    我理解不鼓励使用绝对定位,但我觉得这是最好的方法(假设可以添加图片),因为这样我可以操纵设置位置,使其在攻击期间向上移动。我曾尝试使用gridbag和grid layout来实现这一点,但这两种方法都不太方便我。

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

    3 回复  |  直到 6 年前
        1
  •  1
  •   Hovercraft Full Of Eels    6 年前

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

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

        2
  •  0
  •   camickr    6 年前

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

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

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

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

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

        3
  •  0
  •   Hancie Phago    2 年前
    JLabel label=new JLabel("");
        Image img=new ImageIcon(this.getClass().getResource("hancie.png")).getImage();
        label.setIcon(new ImageIcon(img));
        label.setBounds(10,50,200,200);
        label.setBorder(new LineBorder(Color.BLACK,4));
        frame.add(label);