我正在编写应用程序并将自己的自定义窗口按钮作为设计的一部分。然而有一件事困扰着我。我将图像添加到我的jButton中:
ImageIcon iExit = new ImageIcon("icons/exit.png");
System.out.print(iExit.getIconHeight());
base.setLayout(null);
winex = new PINGButton(iExit);
但是我的测试中一直没有得到-1,所以我显然没有得到任何结果。然而,这不是文件的问题,当我为测试添加这些代码时,我没有任何异常:
try {
BufferedImage img = ImageIO.read(getClass().getResource("icons/exit.png"));
} catch (IOException e) {
System.out.println("yep");
}
我使用不同的输入运行它以确保但该文件路径有效。
这里有一些注意事项。我关掉了窗户装饰品。我不认为应该影响它,但应该说明一些事情。此按钮静态放置在窗口中的无布局jPanel中。我还设置了自定义颜色鼠标效果(可能有更好的方法来做到这一点,但atm这就是我正在使用的):
package main.java.com.hackathon.ping.objects;
import javax.swing.Icon;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class PINGButton extends JButton {
private final Color defaultColor, hoverColor;
/**
* Keeping Eclipse Happy
*/
private static final long serialVersionUID = 1L;
public PINGButton(String text) {
super(text);
defaultColor = Color.WHITE;
hoverColor = Color.LIGHT_GRAY;
this.setBackground(defaultColor);
addMouse();
this.setBorderPainted(false);
this.setIcon(getIcon());
}
public PINGButton(Icon i) {
super(i);
defaultColor = Color.WHITE;
hoverColor = Color.LIGHT_GRAY;
this.setBackground(defaultColor);
addMouse();
this.setBorderPainted(false);
}
public PINGButton(String text, Color main, Color hover) {
super(text);
defaultColor = main;
hoverColor = hover;
super.setBackground(defaultColor);
addMouse();
this.setBorderPainted(false);
}
private void addMouse() {
super.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent a) { /* NOTHING */}
@Override
public void mouseEntered(MouseEvent a) {
doMouseEnt();
}
@Override
public void mouseExited(MouseEvent a) {
doMouseEx();
}
@Override
public void mousePressed(MouseEvent arg0) {/* NOTHING */}
@Override
public void mouseReleased(MouseEvent arg0) {/* NOTHING */}
});
}
public void doMouseEx() {
this.setBackground(defaultColor);
this.setIcon(getIcon());
}
public void doMouseEnt() {
this.setBackground(hoverColor);
this.setIcon(getIcon());
}
}
图像尺寸不是问题,我已尝试将图像和按钮调整为多种尺寸,似乎没有任何变化。
有什么想法吗?