为未定义数量的JLabel添加MouseListeners

时间:2015-05-05 17:56:56

标签: java loops for-loop mouselistener

我在使用MouseListeners时遇到了一些问题。我正在尝试将多个JLabel添加到JFrame中,并且完美无缺。问题是我还想将MouseListeners添加到每个JLabel。但它并不想以这种方式工作,因为它抱怨变量不是最终的。任何人都可以帮我这个吗?

它在mouseEntered内部和mouseExited函数中抱怨。在eclipse中,变量按钮会突出显示,并且它表示变量需要是最终变量。

代码:

CHECK CONSTRAINT

3 个答案:

答案 0 :(得分:0)

你在这做什么

button.addMouseListener(new MouseListener(){

            public void mouseClicked(MouseEvent arg0) {}
...

正在创建anonymous class。它具有与local classes相同的限制:如果它们不是finaleffectively 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。