我使用名为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是一个标签,我有.png格式的所有字母图标,从A到Z。
任何人都可以告诉我如何做到这一点吗?
答案 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图像。我希望这能解决你的问题