0

ユーザーが URL を RSS フィードに提供し、その情報をダウンロードして解析し、それをJTextAreas に表示できるようにするプログラムを作成しています。

  • ユーザーは、必要な数のフィード カテゴリを追加できます。(各カテゴリは別のペインに表示されます)
  • ユーザーは、1 つのカテゴリに好きなだけフィードを追加できます。
  • ユーザーは、新しいフィードまたは新しいカテゴリを追加できます。

ArrayList(ArrayList) = categoryList があります。その各項目は、カテゴリ = ArrayList です。また、Feed オブジェクトには、ArrayList を返す getContents() メソッドが含まれています。

すべてのフィードを JTextArea に関連付けたいと考えています。次に、対応する JTextArea に表示しながら、FeedItems を反復処理します。

Feed <=> JTextArea の間で 1 対 1 のマップを関連付ける方法を見つけることに本当に行き詰まっています。

これが私の試みです:

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

すべてのフィードに関連付けられているIDはありますか?はいの場合、キーをid、値をJTextAreaオブジェクトとしてHashMapを使用できます。いいえの場合は、フィードごとにカスタムIDを作成し、関連付けにHashMapを使用できます。フィードの反復に関しては、ifの代わりにループを使用する必要があります。

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 に答える