2012-10-28 48 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