2

カーソルを合わせると変化する画像を除いて、境界線などを表示しないボタンを実装したいと思います。画像(ホバー画像を表示)をクリックすると、いくつかのコードが実行されます。

また、これらすべてを別のクラスに入れて、再利用可能なコンポーネントを用意したいと思います。

JButtonを拡張すると、メソッドaddActionListener()などが提供されます。ただし、setAction()メソッドを使用すると、コンストラクターで設定した画像が削除されます。したがって、このクラスと組み合わせてアクションを使用することはできないため、防水ではありません。そして、私は確かにsetAction()のようなメソッドをオーバーライドしたくありません。

public class JHoverLabel extends JButton {

private final Icon normal;
private final Icon hovered;

public JHoverLabel (Icon normal, Icon hovered) {
    this.normal = normal;
    this.hovered = hovered;

    setIcon(normal);

    setFocusPainted(false);
    setMargin(new Insets(0, 0, 0, 0));
    setContentAreaFilled(false);
    setBorderPainted(false);
    setOpaque(false);

    addMouseListener(new HoverListener());
}


private class HoverListener implements MouseListener {

    @Override
    public void mouseClicked(MouseEvent e) {}

    @Override
    public void mouseEntered(MouseEvent e) {
        setIcon(hovered);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        setIcon(normal);
    }

    @Override
    public void mousePressed(MouseEvent e) {}

    @Override
    public void mouseReleased(MouseEvent e) {}        
} 
}

JLabelを拡張すると、MouseListenerと組み合わせてやりたいことができるように見えますが、「click-on-me-to-do-something」は基本的にJButtonにつながるため、ここでは間違ったコンポーネントを使用しているように感じます。

だから私は何を使うべきですか?JLabelまたはJButton?

4

2 に答える 2

4

JButton.setXxxIconに実装されたメソッドを使用する

button.setRolloverIcon((Icon));
button.setPressedIcon(Icon);
button.setDisabledIcon(Icon);

代わりにButtonModelMouseListenerを実装できます

于 2013-01-22T14:48:00.733 に答える
3

だから私は何を使うべきですか?JLabelまたはJButton?

を使用しJButtonます。あなたのマウスチャレンジユーザーはあなたに感謝します。

于 2013-01-22T14:45:06.897 に答える