3

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

在此处输入图像描述

我需要创建一个类,将鼠标悬停效果应用于我拥有的 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 是一个标签,我有从 A 到 Z 的 .png 格式的所有字母图标。

谁能给我一个想法,我该怎么做?

4

5 回答 5

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;
   }

}

于 2013-05-28T17:30:24.970 回答
1

像这样的东西怎么样:(草稿)

// 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.

于 2013-05-28T17:41:38.310 回答
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);
    }    
}
于 2013-05-28T17:27:41.930 回答
0

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

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

代替:

new javax.swing.ImageIcon(...)

已经更短了:)

然后,您可以创建预加载图像的哈希图,其中 B 的每个实例是键,加载的图标是值。

于 2013-05-28T17:23:15.613 回答
0

如果我得到你的好,我想你只想要一个图像,而不是当鼠标在它右边时改变每一个图像。如果是这种情况,您应该做的是获取缓冲区中每个图像的位置并将其与鼠标 xny 位置进行比较,以了解要更改的 wc 图像。我希望这能解决你的问题

于 2013-05-28T17:26:44.833 回答