微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在JButton的较大imageIcon上设置较小的ImageIcon?同时我希望两个图像都可见

如何解决如何在JButton的较大imageIcon上设置较小的ImageIcon?同时我希望两个图像都可见

我想为《 Tanks Game》编写代码,但在现有ImageIcon上设置tank.jpg时遇到问题,因为我希望这两个图像都可见并显示用户,就像:
JButton block = new JButton () ;
block.setIcon(new ImageIcon(\"ground.png\")) ;// sets the first image 
block.setIcon(new ImageIcon(\"tank.png\")) ;// sets the second image
但是,如果我这样编写代码,第二个setIcon将替换第一个setIcon,这是我不想要的,任何想法如何一次在JButton上具有2个图标?谢谢     

解决方法

        最简单的方法是将两个图标合并为一个。您可以手动执行此操作(如果只有很少的组合),也可以自己编写
Icon
实现。 您可以例如通过以下实现将两个图标并排对齐:
import java.awt.Component;
import java.awt.Graphics;

import javax.swing.Icon;


public class DoubleIcon implements Icon {

    private static final int ICONSPACING = 4;

    private final Icon i1;
    private final Icon i2;

    public DoubleIcon(Icon i1,Icon i2) {
        this.i1 = i1;
        this.i2 = i2;
    }

    @Override
    public void paintIcon(Component c,Graphics g,int x,int y) {
        i1.paintIcon(c,g,x,y + (getIconHeight() - i1.getIconHeight()) / 2);
        i2.paintIcon(c,x + ICONSPACING + i1.getIconWidth(),y + (getIconHeight() - i2.getIconHeight()) / 2);
    }

    @Override
    public int getIconWidth() {
        return i1.getIconWidth() + ICONSPACING + i2.getIconWidth();
    }

    @Override
    public int getIconHeight() {
        return Math.max(i1.getIconHeight(),i2.getIconHeight());
    }
}
    ,        复合图标可让您更加灵活地绘制图标。     ,        您需要先合并图像,然后再设置按钮图标。您如何做取决于您想要如何将它们组合在一起。您是想要一个在另一个之上还是另一个?无论哪种方式,您都需要执行以下操作:
BufferedImage groundImage = ImageIO.read(new File(\"ground.png\");
BufferedImage tankImage = ImageIO.read(new File(\"tank.png\"));
Graphics2 g2 = groundImage.createGraphics();
g2.drawImage(x,y,tankImage);
然后,groundImage将在坐标(x,y)的顶部绘制tankImage。此时,您可以将按钮图标设置为groundImage。 (注意:我刚刚在iPad上回答了这个问题,因此代码可能完全正确)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。