質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Java

    14427questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Twitter

    700questions

    Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Java初心者の者です。Twitterクライアントを作ろうとしているものです

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 808
退会済みユーザー

退会済みユーザー

Javaでアプリを作ろうということで
Twitterで最低限呟きとTLが見れるプログラムを作ろうとしてるのですが
GUIを作っている最中に問題が起きました

TLが取得と表示ができたのですが複数のJLabelを使って個別に表示しようとしているのですが1つ1つのツイートを個別に表示できなく、さらに取得したツイートの中で一番古いツイートを表示してしまいます。

package twitterApp;

import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EmptyBorder;

import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;

public class TwitterClientGUI extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TwitterClientGUI frame = new TwitterClientGUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     * @throws IOException
     * @throws TwitterException
     */
    JLabel  lblTweets [];

    public TwitterClientGUI() throws IOException, TwitterException {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 764);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));

        JPanel panel = new JPanel();
        contentPane.add(panel);

        JLabel lblTweet1 = new JLabel("Tewwt1");
        panel.add(lblTweet1);

        JPanel panel_1 = new JPanel();
        contentPane.add(panel_1);

        JLabel lblTweet2 = new JLabel("Tweet2");
        panel_1.add(lblTweet2);

        JPanel panel_2 = new JPanel();
        contentPane.add(panel_2);

        JLabel lblTweet3 = new JLabel("Tweet3");
        panel_2.add(lblTweet3);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setViewportView(contentPane);

        setContentPane(scrollPane);

         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String tweet = "";
            while(tweet.isEmpty()) {
                System.out.print("今何してる ? : ");
                tweet = br.readLine();
                if(tweet.length() > 140) {
                    System.out.println("字数制限を超えています。");
                    tweet = "";
                    continue;

                }

            }

        // TODO 自動生成されたメソッド・スタブ
            Twitter twitter = new TwitterFactory().getInstance();
         Status status = null;
        try {
            status = twitter.updateStatus(tweet);
        } catch (TwitterException e1) {
            // TODO 自動生成された catch ブロック
            e1.printStackTrace();
        }
         User user = twitter.verifyCredentials();


            try{
            //ツイートを表示
             System.out.println(status.getUser().getScreenName() + " として投稿しました : " + status.getText());
            }catch(Exception e){
                System.out.print(e);
            }
            //TLの表示
            try {
                //TLの取得
                ResponseList<Status> homeTl = twitter.getHomeTimeline();

                String tubuyaki [] = new String[homeTl.size()];

                int i = 0;


               // lblTweets = new JLabel[3];
               // lblTweets[0] = lblTweet1;
                //lblTweets[1] = lblTweet2;
                //lblTweets[2] = lblTweet3;




                for (Status status1 : homeTl) {
                    //つぶやきのユーザーIDの取得
                    String userName = status1.getUser().getScreenName();
                    //つぶやきの取得
                    String tweet1 = status1.getText();
                    if(i>3){
                    //lblTweets[i].setText("ユーザーID:" + userName + "\r\n" + "tweet:" + tweet1);




                    //tubuyaki[i] = status1.getText();
                    //i++;
                    //break;
                    }
                }

            } catch (TwitterException e) {
                e.printStackTrace();
            }
    }

}

   

問題がると思ったところは//で消しています。

Twitter公式のようにとは望みませんが個別にTLの表示(特にJlabelなどこだわりはありませんテキストフィールドでもなんでもGUIで表示できればいいです。)
あとは動的にTLが動くようにしたいです

他にも簡単でできることがあればアドバイスお願いします
コード全体はこちらにアップしておきました
リンク内容

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2017/01/13 10:17

    私も初心者なので回答はわからないのですが、質問の題名は何がわからないかを書いた方がいいですよ。それに初心者なら初心者マークボタンがあるはずなのでそれを押すといいですよ

    キャンセル

  • fuzzball

    2017/01/13 10:20

    コードは ``` で囲って下さい。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/01/16 13:50

    ご意見誠にありがとうございます。編集いたしました

    キャンセル

  • 退会済みユーザー

    2017/01/16 16:06

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

0

ResponseList<Status>  homeTl 
をソートしてやる必要があります

http://twitter4j.org/javadoc/twitter4j/Status.html

{
    ...
    Collections.sort(homeTl , new CustomComparator);
    ...
}
public class CustomComparator {
    public boolean compare(Object status1, Object status2) {
        return status1.getId().before(status2.getId());
    }
}

こんな感じで、homeTl の Statusクラスの時間かID?をcompareすればOKです

動作確認していないのでなんとも言えませんがw

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/16 13:42

    回答ありがとうございます
    本当に初心者なので申し訳ないですがどこにこのソースを入力すればいいか教えてもらえれば助かるのですが

    キャンセル

  • 2017/01/16 16:03

    ```java
    // lblTweets = new JLabel[3];
    // lblTweets[0] = lblTweet1;
    //lblTweets[1] = lblTweet2;
    //lblTweets[2] = lblTweet3;
    ```
    って書いている部分に
    ```java
    Collections.sort(homeTl , new CustomComparator);
    ```
    このクラスの外に
    ```java
    public class CustomComparator {
    public boolean compare(Object status1, Object status2) {
    return status1.getId().before(status2.getId());
    }
    }
    ```
    を書いてみては如何でしょうか?

    キャンセル

  • 2017/01/17 14:38

    すいませんエラーが起きてしまいました(´;ω;`)

    キャンセル

  • 2017/01/17 17:27

    どういったエラーかは分かりませんが、
    import java.util.Collections;
    は行いましたか?
    ```java は不要ですよ

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14427questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Twitter

    700questions

    Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。