使JLabel背景再次透明

我有一个JLabel,当鼠标进入它时会改变它的背景颜色。 我遇到的问题是我希望JLabel在鼠标退出后变得透明。

有没有我可以用来完成这个的声明?

这是德国的一个懒惰的假期,所以结合两个答案:

final JLabel label = new JLabel("some label with a nice text"); label.setBackground(Color.YELLOW); MouseAdapter adapter = new MouseAdapter() { /** * @inherited 

*/ @Override public void mouseEntered(MouseEvent e) { label.setOpaque(true); label.repaint(); } /** * @inherited

*/ @Override public void mouseExited(MouseEvent e) { label.setOpaque(false); label.repaint(); } }; label.addMouseListener(adapter);

问题(实际上,我倾向于将其视为一个错误)是设置opaque属性不会触发重新绘制,因为它是合适的。 JComponent触发一个change事件,但似乎没有人在监听:

 public void setOpaque(boolean isOpaque) { boolean oldValue = getFlag(IS_OPAQUE); setFlag(IS_OPAQUE, isOpaque); setFlag(OPAQUE_SET, true); firePropertyChange("opaque", oldValue, isOpaque); } 

JLabel默认是透明且不透明的,如果要在鼠标退出时更改背景,则必须:

  • 两个州的setBackground() ,进入和退出

  • 更改为JPanel或其他JComponent