我在使用MouseListeners时遇到了一些问题。我正在尝试将多个JLabel添加到JFrame中,并且完美无缺。问题是我还想将MouseListeners添加到每个JLabel。但它并不想以这种方式工作,因为它抱怨变量不是最终的。任何人都可以帮我这个吗?
它在mouseEntered内部和mouseExited函数中抱怨。在eclipse中,变量按钮会突出显示,并且它表示变量需要是最终变量。
代码:
CHECK CONSTRAINT
答案 0 :(得分:0)
你在这做什么
button.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent arg0) {}
...
正在创建anonymous class。它具有与local classes相同的限制:如果它们不是final
或effectively final
,则无法访问本地变量。但是,它可以自由访问封闭的类变量。
因此,要访问变量(我可能会看到它是color
),您需要将其设为类变量,而不是本地一个(本地)变量是你在循环体中创建的变量,它在你的代码中是for
,它只在这个循环中“可见”并在你离开它时被销毁)或者使它成为final
as你被提议做。
像这样改变它应该有效:
final String color = buttons[i].split("\\>")[1].substring(0, 1).toUpperCase() + buttons[i].split("\\>")[1].substring(1);
final JLabel button = new JLabel();
P.S。 String color = buttons[i].split("\\>")[1].substring(0, 1).toUpperCase() + buttons[i].split("\\>")[1].substring(1);;
- 我认为,一个;
就足够了。
答案 1 :(得分:0)
看起来您正在尝试处理mouseEntered和mouseExited来更改标签上的Icon。
您可以使用JButton而不是使用JLabel,并利用默认的翻转功能。您可以使按钮看起来像标签:
JButton button = new JButton(...);
button.setRolloverEnabled(true);
button.setRolloverIcon(...);
button.setBorderPainted( false );
button.setContentAreaFilled(false);
button.setFocusPainted(false);
答案 2 :(得分:0)
好的,谢谢大家的评论和回答。我发现了问题所在,现在我只需要尝试解决它。问题是按钮已添加,但它们不在屏幕顶部。由于某种原因,背景隐藏了JLabel。