我始終保持我的應用程序中自己的Images類,這可能是我最常用的方法。
public static ImageIcon resizeImageIcon(ImageIcon ii, int width, int height){
ImageIcon imageIcon = new ImageIcon(ii.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
return imageIcon;
}
這將重新調整任何現有的ImageIcon的大小。
我也建議您使用可以單擊的JLabel。這主要是爲了避免奇怪的按鈕邊框。如果你喜歡這個,我已經提供了自己的類來處理這個問題。
import java.awt.Cursor;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class FClickLabel extends JLabel {
public FClickLabel(ImageIcon on, ImageIcon off, ImageIcon press){
this.setIcon(off);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
setIcon(on);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
setIcon(press);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAction();
}
});
}
public FClickLabel(String text, ImageIcon on, ImageIcon off, ImageIcon press){
this.setIcon(off);
this.setText(text);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
setIcon(on);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
setIcon(press);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAction();
}
});
}
public void clickAction() {
}
}
如果你只想要一個圖像,你可以簡單地提供它3次或刪除改變它並編輯構造函數的代碼。像這樣的例子,我用我的應用程序退出按鈕構建FClickLabel可以覆蓋clickAction()時:
FClickLabel exButton = new FClickLabel(Images.resizeImageIcon(Images.exitOn, 24, 24)
,Images.resizeImageIcon(Images.exitOff, 24, 24)
,Images.resizeImageIcon(Images.exitPress, 24, 24)){
@Override
public void clickAction(){
System.exit(0);
}
};
先從[setMargin(http://docs.oracle.com/javase/8/ docs/api/javax/swing/AbstractButton.html#setMargin-java.awt.Insets-)JButton繼承的方法。 – VGR