2012-11-30 91 views
0

我正在編寫一個程序,允許用戶提供RSS源的URL,下載並解析信息,然後將其顯示到JTextArea s。如何關聯JTextArea和Object?如何知道哪個對象屬於哪個jtextArea?

  • 用戶可以根據自己的需要添加任意數量的Feed類別。 (每個類別都在一個單獨的窗格中顯示)
  • 用戶可以根據自己的需要在類別中添加任意數量的Feed。
  • 用戶可以添加新的提要或新的類別。

我有一個ArrayList(ArrayList)= categoryList。它的每個項目都是category = ArrayList。 Feed對象包含一個返回ArrayList的getContents()方法。

我想將每個Feed與一個JTextArea相關聯。然後我想遍歷FeedItems,同時在相應的JTextArea中顯示它們。

我真的很難找到一種方法來關聯飼料< => JTextArea之間的一對一地圖。

這裏是我的嘗試:

if (category_list.size() > 0) 
    { 
     final java.util.Iterator<ArrayList<Feed>> categoryListIterator = category_list.iterator(); 
     final ArrayList<Feed> currCategory; 
     final java.util.Iterator<Feed> currFeedIterator; 

     while (categoryListIterator.hasNext()) 
     { 
      currCategory = categoryListIterator.next(); 
      while (((java.util.Iterator<ArrayList<Feed>>) currCategory).hasNext()) 
      { 
       ArrayList<Feed> currFeed = ((java.util.Iterator<ArrayList<Feed>>) currCategory).next(); 

       currFeedIterator = currFeed.iterator(); 
       while (currFeedIterator.hasNext()) 
       { 
        Feed feed = currFeedIterator.next(); 
        final java.util.Iterator<FeedItem> feedIterator = feed.getContents().iterator(); 
              while (feedIterator.hasNext()) 
              { 
               // find the appropriate JTextArea 
               // iterate through the articles. 

               correspondingJtextArea.setText(feedIterator.next().toString()); 
              } 

       } 
      } 
     } 
    } 

請讓我知道,這將是跟蹤在JTextArea我應該改變文本的最佳方式。

我是否正確地遍歷所有的Feed? 一個說明我的情況的簡短例子會非常有幫助。

UPDATE

好了,現在我是通過所有的飼料沒關係迭代。我只需要找到一種方法來編寫一個將Feed與JTextArea關聯的HashMap。

+0

*「我在寫一個程序..」*先修正你的SHIFT鍵! –

+0

有關使用單個「JTextPane」的簡明示例,另請參閱[Q&A](http://stackoverflow.com/q/10461087/230513)。 – trashgod

+0

我必須讓JtextAreas顯示Feed內容。有什麼可以幫助的哈希表嗎? –

回答

1

是否有與每個飼料相關的任何標識?如果是的話,你可以使用key作爲id和value作爲JTextArea對象的HashMap。如果不是,那麼您可以爲每個提要創建一個自定義ID,並使用HashMap進行關聯。 關於迭代您的提要,您需要使用循環而不是ifs。

public static JTextArea getTextAreaByFeedId(int id) 
{ 
    JTextArea correspondingJtextArea = id_txtareaMap.get(id); 
    if(correspondingJtextArea == null) 
    { 
     correspondingJtextArea = new JTextArea(); 
     id_txtareaMap.put(id, new JTextArea()); 
    } 
    return correspondingJtextArea; 
} 
// Reads in an array of integers, sorts them, 
// then prints them in sorted order. 
public static void main (String[] args) { 
    HashMap<Integer, JTextArea> id_txtareaMap = new HashMap<>(); 
    if (category_list.size() > 0) 
    { 

     final java.util.Iterator<ArrayList<Feed>> categoryListIterator = category_list.iterator(); 
     final ArrayList<Feed> currCategory; 
     final java.util.Iterator<Feed> currFeedIterator; 

     while (categoryListIterator.hasNext()) 
     { 
      currCategory = categoryListIterator.next(); 
      while (((java.util.Iterator<ArrayList<Feed>>) currCategory).hasNext()) 
      { 
       ArrayList<Feed> currFeed = ((java.util.Iterator<ArrayList<Feed>>) currCategory).next(); 

       currFeedIterator = currFeed.iterator(); 
       while (currFeedIterator.hasNext()) 
       { 
        Feed feed = currFeedIterator.next(); 
        final java.util.Iterator<FeedItem> feedIterator = feed.getContents().iterator(); 
        while (feedIterator.hasNext()) 
        { 
         // find the appropriate JTextArea 
         // iterate through the articles. 
         JTextArea correspondingJtextArea = getTextAreaByFeedId(FeedItem.getId()); 
         correspondingJtextArea.setText(feedIterator.next().toString()); 
        } 

       } 
      } 
     } 
    } 
} 
+2

我可以告訴飼料分開的唯一方法是如果我打電話給他們的方法。但是,用戶可以添加兩次相同的Feed。我不明白如何創建一個HashMap以及如何創建自定義ID!你能否提供一些類型的例子,或者更詳細地解釋這個過程? –

+0

我不明白你的第一行。有什麼方法可以調用Feed來獲取任何Id?如果用戶兩次添加相同的Feed,您是否需要2個相應的文本區域? Feed類應該有創建對象時可以填充的Id(自定義)字段(例如,保持遞增的簡單計數),並且使用相同的Id可以創建帶有文本區域的Hashmap。像:'HashMap id_txtareaMap = new HashMap <>(); id_textareaMap.put(feed.getId(),new JTextArea());' –

+0

我爲我的Feed類創建了一個名爲getId的方法。您能否告訴我我之後做了什麼,以便我的所有Feed都有ID,並且所有的JTextArea都有ID。謝謝! –

相關問題