2012-10-28 47 views
1

的下一个/前一个对象我有这样的问题:JButton,并树形图

1)没有通过的JTextField放置在树形图的对象。 (电话簿程序)。

2)有按钮可以在TreeMap中实现可用记录的视图。 单击JTextField中显示的TreeMap的下一个/上一个可用对象的这些按钮时。 (滚动查看可用记录)。

我尝试这样的代码,但没有奏效:/

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()); 

结果是 “假”,如果这将是无论如何有帮助。

+0

添加侦听器时的空treeMap?只是猜测,但是,没有看到更多的代码没有办法告诉,最好是SSCCE – kleopatra

回答

0

我公布这件事使用NavigableMap中的方法。 Thx全部请求帮助:

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); 
        } 
      } 
     } 
    }); 
1

看来您在应用程序中正在使用另一个Iteratoriter1。要通过浏览TreeMap您需要使用您的ActionListener定义的迭代器:

if (iter.hasNext()){ 
    String str = iter.next().toString(); 
    ... 
+0

这只是问题后的代码中的错字。对不起,我不注意。 – supacat

1

您是否尝试过移动迭代器里面的“的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)); 
    } 
    } 
}); 
+0

感谢您的回应,我首先尝试了它,但从代码中可以看到,在这种情况下,每次按下按钮时,迭代器都会再次初始化,因此JTextField中显示的值始终是TreeMap中第一个元素的值(第一次迭代)。 – supacat