Передайте переменную в конструктор из слушателя - PullRequest
0 голосов
/ 14 марта 2011

Приведенный ниже код генерирует кнопки в цикле и пытается передать строковый параметр в прослушиватель кнопки изнутри кнопки.Я не достигаю желаемого результата.Когда я нажимаю каждый уникальный объект «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);    
    }

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Похоже, key - это поле в классе включения.

Удалите это.Создайте объявление назначения ключа и final:

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

. Это даст вашему экземпляру слушателя легкую переменную key и соответствующий ключ.

Возможно, вы захотитеудалите и изменяйте статические значения, которые у вас могут быть, используйте коллекции Java 2 (некоторые из Swing по-прежнему связаны с 1.1, что, к сожалению, на самом деле не было в 1.1), и обобщенные (как было представлено в 2004 году!).(Изменить: видите, у вас есть ярлык ежевики. Они все еще рядом?)

0 голосов
/ 14 марта 2011
    Enumeration keysEnumeration = table.keys();

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

key должен быть последним, чтобы быть доступным внутри анонимного внутреннего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...