下面的代码在循环中生成一个按钮,并尝试将字符串参数从按钮内部传递给按钮侦听器。我没有达到预期的结果。当我按下每个唯一的“ buttonField”对象时,新屏幕上的变量“ key”是相同的值。下面的代码正确吗?

谢谢

Enumeration keysEnumeration = table.keys();
    while(keysEnumeration.hasMoreElements()){

            key = (String)keysEnumeration.nextElement();
     buttonField.setChangeListener(new FieldChangeListener() {
             public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().pushScreen(new Screen(key));
            }
        });
        add(buttonField);
    }

最佳答案

看起来key是封闭类中的一个字段。

删除那个。进行密钥分配声明和final

final String key = (String)keysEnumeration.nextElement();


这将为您的侦听器的简单实例提供一个不同的key变量,以及相应的键。

您可能还希望删除和可变的静态变量,使用Java 2集合(某些Swing仍绑定到1.1,这很不幸,因为它实际上不在1.1中)和泛型(如2004年引入!)。 (编辑:看到您有blackberry标签。它们还在吗?)

07-24 15:45