如何关联JTextArea和Object?如何知道哪个对象属于哪个jtextArea?

时间:2012-11-30 04:23:48

标签: java swing hashtable jtextarea

我正在编写一个程序,允许用户提供RSS源的URL,下载和解析信息,然后将其显示到JTextArea

  • 用户可以根据需要添加任意数量的Feed类别。 (每个类别在单独的窗格中表示)
  • 用户可以在他/她想要的类别中添加任意数量的Feed。
  • 用户可以添加新Feed或新类别。

我有一个ArrayList(ArrayList)= categoryList。它的每个项目都是category = 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? 一个说明我情况的简短例子非常有帮助。

更新

好的,现在我可以遍历所有的Feed。我只需要找到一种方法来编写一个将Feed与JTextArea相关联的HashMap。

1 个答案:

答案 0 :(得分:1)

是否有与每个Feed相关的标识?如果是,您可以使用带有键作为id和值的HashMap作为JTextArea对象。如果不是,则可以为每个订阅源创建自定义ID,并使用HashMap进行关联。 关于迭代您的Feed,您需要使用循环而不是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());
                    }

                }
            }
        }
    }
}