1

私はアプリをコーディングしており、デザインの一部として独自のカスタム ウィンドウ ボタンを作成しています。しかし、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