JButton и следующий/предыдущий объект карты дерева

У меня есть проблема:

1) Есть объекты, помещенные в TreeMap через JTextField. (программа, похожая на телефонную книгу).

2)Есть кнопки, реализующие просмотр доступных записей в TreeMap. При нажатии на эти кнопки следующие/предыдущие доступные объекты TreeMap отображаются в JTextField. (пролистайте доступные записи).

Я пробовал этот код, но он не работал :/

btn[4].addActionListener(new ActionListener(){
     Iterator iter = tree.keySet().iterator();
      public void actionPerformed(ActionEvent e) {
         if (iter.hasNext()){
         String str = iter.next().toString();
         fldFio.setText(str);
         fldNumber.setText(tree.get(str));
         }
      }
}); 

Я добавил эту строку в метод actionPerformed в качестве первой строки:

System.out.println(iter1.hasNext());

Результат "false", если это будет как-то полезно.


person supacat    schedule 28.10.2012    source источник
comment
пустой treeMap во время добавления слушателя? Просто предположение, однако, невозможно сказать, не видя больше кода, предпочтительно SSCCE.   -  person kleopatra    schedule 29.10.2012


Ответы (3)


Вы пытались переместить итератор внутри метода «actionPerformed()»:

btn[4].addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e) {
     Iterator iter = tree.keySet().iterator();
     if (iter.hasNext()){
     String str = iter1.next().toString();
     fldFio.setText(str);
     fldNumber.setText(tree.get(str));
     }
  }
}); 
person Dan Iliescu    schedule 28.10.2012
comment
Спасибо за ваш ответ, я попробовал это сначала, но, как вы можете видеть из кода, в этом случае каждый раз, когда я нажимаю кнопку, итератор снова инициализируется, поэтому значение, появляющееся в JTextField, всегда будет значением первого элемента в TreeMap ( первая итерация). - person supacat; 28.10.2012

Похоже, вы используете другой Iterator iter1 в своем приложении. Чтобы перемещаться по вашему TreeMap, вам нужно использовать итератор, определенный в вашем ActionListener:

 if (iter.hasNext()){
    String str = iter.next().toString();
    ...
person Reimeus    schedule 28.10.2012
comment
Это просто опечатка в вопросительно-почтовом коде. Извините за мою невнимательность. - person supacat; 28.10.2012

Я выпустил эту штуку, используя методы из NavigableMap. Спасибо всем за помощь:

btn[4].addActionListener(new ActionListener(){
       String str;
       public void actionPerformed(ActionEvent e) {
           if (tree.size() != 0){
               if ((str)==null){
                   str = tree.firstKey();
                   } else {
                   fldFio.setText(str);
                   fldNumber.setText(tree.get(str));
                   str = tree.higherKey(str);   
                   }
          }
       }
   }); 
person supacat    schedule 29.10.2012