【问题标题】:Absolute Positioning Image Icons in java swingjava swing中的绝对定位图像图标
【发布时间】:2022-02-25 20:12:52
【问题描述】:

所以我正在尝试为我的项目编写一个使用 java swing 的 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 中,然后我执行 setLocation 来选择它的位置。

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

所以,如果有什么方法可以进行这种锻炼,请告诉我。 提前致谢!

【问题讨论】:

  • “然而,让我停滞不前的是动画。” DYM 图像是动画(多帧)GIF,或者代码正在移动图像(或两者兼而有之,或其他)?

标签: java swing css-position imageicon


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    通常你会这样做:

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

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

    【讨论】:

      【解决方案3】:
      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-21
        • 2019-02-06
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 2015-07-18
        相关资源
        最近更新 更多