【问题标题】:How to associate JTextArea and Object? How to know which object belongs to which jtextArea?如何关联 JTextArea 和 Object?如何知道哪个对象属于哪个jtextArea?
【发布时间】:2012-11-18 07:19:20
【问题描述】:

我正在编写一个程序,允许用户提供 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? 一个说明我的情况的简短示例将非常有帮助。

更新

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

【问题讨论】:

  • “我正在编写一个这样的程序..”先修复你的 SHIFT 键!
  • 另请参阅Q&A,了解使用单个 JTextPane 的简明示例。
  • 我必须有 JtextAreas 才能显示提要内容。有没有像 Hashtables 这样的东西可以提供帮助?

标签: java swing hashtable jtextarea


【解决方案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());
                    }

                }
            }
        }
    }
}

【讨论】:

  • 我可以区分提要的唯一方法是调用它们的方法。但是,允许用户添加两次相同的提要。我不明白如何创建 HashMap 以及如何创建自定义 ID !!!您能否提供一些示例,或者更详细地解释此过程?
  • 我不明白你的第一行。有什么方法可以调用提要来获取任何 ID?如果用户两次添加相同的提要,你想要 2 个对应的文本区域吗? Feed 类应该有 Id(自定义)字段,您可以在创建对象时填充(例如,不断增加的简单计数),并且使用相同的 Id,您可以创建带有文本区域的 Hashmap。喜欢:HashMap&lt;Integer, JTextArea&gt; id_txtareaMap = new HashMap&lt;&gt;(); id_textareaMap.put(feed.getId(), new JTextArea());
  • 我正在为我的 Feed 类创建一个名为 getId 的方法。你能告诉我我之后做什么,这样我的所有提要都有 ID,所有 JTextArea 都有 ID。谢谢!
  • 我的 Feed 类中不能有 getId 方法。它们遵循 RSS 模式并由解析器自动创建。有没有别的办法??????你能告诉我如何确保我添加的每个 Feed 都与 JTextArea 相关联吗?我要问的是,如果给我一个 Feed。我如何将它链接到 JTextArea?
  • 您需要在创建提要对象时填写该 ID。您可以维护 id_txtareaMap 地图以具有相应的文本区域。上面的代码对你有帮助吗(更新你的代码并发布)?
猜你喜欢
  • 2020-07-11
  • 2010-12-28
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 2017-11-19
  • 2014-08-05
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多