我希望实现一个不显示边框或其他任何内容的按钮,但将鼠标悬停在其上时会发生变化的图像除外。单击图像(显示悬停图像)将执行一些代码。
我还想将所有这些放在一个单独的类中,因此我有一个可重用的组件。
扩展JButton为我提供了addActionListener()等方法。但是使用setAction()方法会删除我在构造函数中设置的图像。所以它不是不漏水的,因为我不能将Action与这个类结合使用。我当然不想覆盖像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结合使用,但我觉得在这里使用了错误的组件,因为“点击我做某事”基本上会把我带到JButton。 / p>
那我该怎么用? JLabel还是JButton?
答案 0 :(得分:4)
button.setRolloverIcon((Icon));
button.setPressedIcon(Icon);
button.setDisabledIcon(Icon);
代替MouseListener
,您可以实施ButtonModel
答案 1 :(得分:3)
那我该怎么用? JLabel还是JButton?
使用JButton
。您的鼠标挑战用户会感谢您。