Java 我如何制作一个按钮大小的图片?

Java 我如何制作一个按钮大小的图片?,java,swing,jbutton,imageicon,Java,Swing,Jbutton,Imageicon,我正在将一个ImageIcon添加到我的JButton中,但图像的大小已关闭。我希望图像占据JButton按钮的全部尺寸,而不仅仅是部分,我如何做到这一点?我附上了正在发生的事情的图片 start = new JButton("Start Menu"); start.setForeground(Color.WHITE); ImageIcon ii = new ImageIcon("C:\\Users\\Bobby\\Desktop\\Ocean.jpg"); int scale = 1; i

我正在将一个
ImageIcon
添加到我的
JButton
中,但图像的大小已关闭。我希望图像占据
JButton
按钮的全部尺寸,而不仅仅是部分,我如何做到这一点?我附上了正在发生的事情的图片

start = new JButton("Start Menu");
start.setForeground(Color.WHITE);

ImageIcon ii = new ImageIcon("C:\\Users\\Bobby\\Desktop\\Ocean.jpg");
int scale = 1; 
int width = ii.getIconWidth();
int newWidth = width / scale;
start.setIcon(new ImageIcon(ii.getImage().getScaledInstance(newWidth, -1,
          java.awt.Image.SCALE_SMOOTH)));

默认情况下,图像仅限于
JButton
的一部分,因为它同时显示文本和图标

通过将文本覆盖在图像顶部,图标将增长以填充更多的按钮。这可以通过设置文本放置的垂直和水平首选项来实现:

start.setHorizontalTextPosition(JButton.CENTER);
start.setVerticalTextPosition(JButton.CENTER);
此时,您的图像将覆盖大部分
JButton
,但在边框周围仍然可以看到
JButton
中可能不需要的部分。这是因为利润限制了图标的进一步增长

通过使用
start.setMargin(新的插入(0,0,0,0)),将边距设置为0

按钮的外观应与此类似:


我总是在应用程序中保留自己的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;
}
这将重新调整任何现有图像图标的大小

我还建议您使用可以单击的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);
            }
        };

从JButton继承的方法开始。看起来不错,兄弟!这是我想要的,而且更多!!