我想在我的Java程序中简化一些事情

时间:2013-05-28 17:09:41

标签: java swing awt

我使用名为WordHunt的NetBeans设计工具制作了一款游戏。它看起来像这样:

enter image description here

我需要创建一个将鼠标悬停效果应用于我拥有的16个标签的类。这是在输入鼠标时更改图标B的代码:

private void b1MouseEntered(java.awt.event.MouseEvent evt) {                                
        b1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ip/imag/" +B+ ".png")));

    }                               

我在标签上应用了默认图标。 完成课程后,而不是写作:

b1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ip/imag/" +B+ ".png")));

编写className( b1 B ); 对于下一个标签,同样的事情 className( b2 C );

观察:b1是一个标签,我有.png格式的所有字母图标,从A到Z。

任何人都可以告诉我如何做到这一点吗?

5 个答案:

答案 0 :(得分:3)

如果我理解你想做什么,你可以使用这种方法:

public void setRolloverIcon(Icon rolloverIcon)

在JButton类中定义,用于配置翻转图标。

只需创建一个这样的简单类:

class HoverEffectButton extends JButton{

  HoverEffectButton(Image img1, Image img2) {
    super(new ImageIcon(img1));
    this.setRolloverIcon(new ImageIcon(img2));
  }

}

希望这会有所帮助。 当然,您可以创建一个帮助程序类,允许根据图像名称加载图像

   class AssetsHelper{
   private static final String DEFAULT_ASSETS_ROOT = "assets/";
   private static final String DEFAULT_IMAGE_SUBFIX = ".png";

   public static Image loadImage(String name){
      BufferedImage img = null;
      try {
        img = ImageIO.read(new File(DEFAULT_ASSETS_ROOT + name + DEFAULT_IMAGE_SUBFIX));
      } catch (IOException e) {
         .... 
      }
      return img;
   }

}

答案 1 :(得分:2)

这样的事情:(草稿)

// for storage so we don't load it for each mouse-over
HashMap<String, ImageIcon> images = new HashMap<String, ImageIcon>();

void setIcon(JLabel button, String image)
{
  if (images.containsKey(image))
    return images.get(image);
  else
  {
    String path = "/ip/imag/" + image + ".png";
    ImageIcon icon = new ImageIcon(getClass().getResource(path));
    images.put(image, icon);
    return icon;
  }
}

然后:

setIcon(b1, "B");

但您应该考虑使用按钮,以便使用setRolloverIcon而不是MouseEntered

答案 2 :(得分:1)

public class MyButton extends JButton {
    private ImageIcon normalIcon;
    private ImageIcon hoverIcon;

    public MyButton(String normalURL) {
        String hoverURL = normalURL.replaceFirst("\\.png$", "-hover.png");
        normalIcon = new ImageIcon(getClass().getResource("/ip/imag/" +B+ ".png"); // or so
        hoverICon = ...
    }

    private void b1MouseEntered(MouseEvent evt) {                           
        setIcon(hoverIcon);
    }    
}

答案 3 :(得分:0)

首先在代码的顶部添加此导​​入:

import javax.swing.ImageIcon;
//Then you only need to write
new ImageIcon(...);

而不是:

new javax.swing.ImageIcon(...)

已经缩短了:)

然后你可以创建一个预先加载的图像的hashmap,其中B的每个实例都是键,加载的图标就是值。

答案 4 :(得分:0)

如果我很好,我认为只要一个图像而不是evry图像,当鼠标正确时,它就会变形。如果是这种情况,你应该做的是将每个图像的位置放在缓冲区中,并将其与鼠标x n y位置进行比较,以了解要更改的wc图像。我希望这能解决你的问题