1

作为设计的一部分,我正在编写一个应用程序并做我自己的自定义窗口按钮。然而有一件事一直困扰着我。我将图像添加到我的 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());
    }
}

图像大小不是问题,我尝试将图像和按钮调整为多种尺寸,似乎没有任何变化。

有任何想法吗?

4

0 回答 0