我有一个由5个JLabel对象组成的数组,并且我已经为它们添加了鼠标侦听器,在mouseEntered()函数中,我将标签设置为不透明(True)以更改其背景颜色,但此代码不能正常工作,请帮助。
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class A extends MouseAdapter {
JFrame frame = new JFrame();
JLabel label[] = new JLabel[5];
A() {
frame.setSize(500,500);
frame.setLayout(new FlowLayout());
for(int i=0; i<5; i++) {
label[i] = new JLabel("LABEL: "+i);
label[i].setBackground(Color.BLACK);
label[i].addMouseListener(this);
frame.add(label[i]);
}
frame.setVisible(true);
}
public static void main(String arg[]) {
new A();
}
@Override
public void mouseEntered(MouseEvent entered) {
if(entered.getSource().equals(label))
((JLabel)entered.getComponent()).setOpaque(true);
}
}发布于 2015-02-20 10:15:32
可能的原因是if(entered.getSource().equals(label))
事件的源永远不会是label数组,而是它的一个元素。更好的条件可能是if(entered.getSource() instanceof JLabel)
在更改标注的不透明度属性后,还需要entered.getComponent().repaint();
https://stackoverflow.com/questions/28620583
复制相似问题