Я всегда мой собственный класс «Картинки» в моих приложениях, это, возможно, мой самый используемый метод.
public static ImageIcon resizeImageIcon(ImageIcon ii, int width, int height){
ImageIcon imageIcon = new ImageIcon(ii.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
return imageIcon;
}
это изменяет размеры любого существующего изображенияIcon.
Я также предлагаю вам использовать 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);
}
};
Start с [setMargin] (http://docs.oracle.com/javase/8/ docs/api/javax/swing/AbstractButton.html # setMargin-java.awt.Insets-), который наследует JButton. – VGR