0

我正在编写一个程序,允许用户提供 RSS 提要的 URL,下载并解析信息,然后将其显示给JTextAreas。

  • 用户可以根据需要添加任意数量的提要类别。(每个类别都显示在单独的窗格中)
  • 用户可以根据需要在一个类别中添加任意数量的提要。
  • 用户可以添加新的提要或新的类别。

我有一个 ArrayList(ArrayList) = categoryList。它的每个项目都是类别 = ArrayList。Feed 对象包含一个返回 ArrayList 的 getContents() 方法。

我想将每个 Feed 与一个 JTextArea 相关联。然后我想遍历 FeedItems,同时在相应的 JTextArea 中显示它们。

我真的一直在寻找一种方法来将 Feed <=> 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 与 JTextArea 相关联的 HashMap。

4

1 回答 1

1

是否有与每个提要相关的标识?如果是,您可以拥有一个 HashMap,其键为 id,值为 JTextArea 对象。如果不是,那么您可以为每个提要创建一个自定义 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());
                    }

                }
            }
        }
    }
}
于 2012-11-30T05:35:03.173 回答