最新トレンドを表示する
サンプルアプリケーションで最後に残った要素は、Twitterの最新トレンドを表示するコンポーネントです。このコンポーネントは、Trendsというテキストを表示するJLabelと、トレンドを表示するJListで構成されます。
import twitter4j.Trends;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import javax.swing.*;
import java.awt.*;
public class TrendsPanel extends JPanel {
Twitter twitter;
int componentsWidth = 180;
public TrendsPanel(Twitter twitter) throws TwitterException
{
super(new FlowLayout());
this.setSize(new Dimension(componentsWidth, 220));
this.setPreferredSize(new Dimension(componentsWidth, 220));
JLabel trendsLabel = new JLabel("Trends");
trendsLabel.setSize(new Dimension(componentsWidth, 20));
trendsLabel.setPreferredSize(new Dimension(componentsWidth, 20));
Trends trends = twitter.getTrends();
String trendsArr[] = new String[trends.getTrends().length];
for (int i = 0; i < trends.getTrends().length; i++) {
trendsArr[i] = trends.getTrends()[i].getName();
}
JList trendsList = new JList(trendsArr);
trendsList.setSize(new Dimension(componentsWidth, 200));
trendsList.setPreferredSize(new Dimension(componentsWidth, 200));
this.add(trendsLabel);
this.add(trendsList);
}
}
ここでもTrendsPanelはJPanelを継承し、フローレイアウトを使用し、twitter.getTrends()メソッドの呼び出しで問題が起きた場合にTwitterExceptionをスローします。getTrendsメソッドは、1つのTrendsオブジェクトを返します("Trends"が複数形になっていることに注目してください)。TrendクラスのgetTrends()メソッドは、Trendオブジェクトの配列を返します(こちらは単数形の"Trend"です)。検索されたつぶやきを取得するコードと似た手順で、trendsArrという文字列配列を作成し、forループ内でtrends.getTrends()[i].getName()メソッドを呼び出して各トレンドを取得し、この配列に埋め込みます。メソッド呼び出しの"i"は、forループのインデックス値です。このトレンド配列をJListに渡します。画面の表示はこのようになります。

全体を組み立てる
これですべてのクラスが定義されました。後はmainクラスを作成し、すべてのコンポーネントを1つにまとめるだけです。
import twitter4j.*;
import javax.swing.*;
import java.awt.*;
import java.net.MalformedURLException;
public class Application extends JFrame {
public Application() throws MalformedURLException, TwitterException {
super("Simple Twitter App");
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
LoginDialog login = new LoginDialog();
String userName = login.getUserName();
String password = login.getPassword();
Twitter twitter = new Twitter(userName, password);
add(new FollowerPanel(twitter));
add((new StatusTimeLine(twitter)).getTimeLinePanel());
add(new RightSideBar(twitter));
}
public static void main(String[] args) throws MalformedURLException, TwitterException {
Application application = new Application();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(Toolkit.getDefaultToolkit().getScreenSize());
application.setVisible(true);
}
}
Applicationクラスは、JFrameを拡張し、MalformedURLExceptionとTwitterExceptionをスローします。今回はボックスレイアウトを採用して、FollowerPanel、StatusTimeLine、およびRightSideBarの3つのメインコンポーネントを配置します。冒頭で触れた要求事項に従って、LoginDialogを最初に作成します。ここからユーザー名とパスワードを取得し、これらを引数としてトップレベルのTwitterオブジェクトをインスタンス化します。
mainでは、Applicationインスタンスを作成し、終了時のデフォルトクローズ操作を用意し、ウィンドウが最大化されて表示されるようにします。万事順調なら、コンパイルして実行するとログインダイアログが表示されます。
まとめ
お気づきとは思いますが、このアプリケーションはTwitter Webサイトでできることの半分しか実行できません。Twitterサイトを置き換えることが目的ではなく、独創を加えて機能を拡張するための土台として作ったからです。たとえば、最新の更新を自動的に表示するとか、Twitter4j APIを使って統計データを収集し、それをSQLデータベースに保存するとか、あるいは極端な例を挙げれば、Twitter情報を小さなサイドバーに追加するWebアプリケーションを作成するようなことも可能です。
すでに多数のTwitterアプリケーションが、Web向けに留まらず、iPhoneなどのモバイルプラットフォーム向けにも提供されています。この記事を書くためのリサーチ中に面白いアプリケーションを見つけました。つぶやきを検索するhttp://asktwitr.com(※編集部注)です。他のTwitter検索アプリケーションとは違って、つぶやいた人の居場所をGoogle地図に表示するのがユニークです。
皆さんもいろいろアイデアを工夫して、次のキラーアプリになるようなアプリケーションを作成してみてください。
2009年9月17日の時点で、http://asktwitr.comの
Twitter検索サービスは利用できませんでした。
参考資料
- 『Java Swing,Second Edition』 Marc Loy、Robert Eckstein、Dave Wood、James Elliot、Brian Cole著 O'Reilly Media、2002年11月
- 『Twitter tips, tricks, and tweets』 Paul McFredries著、Wiley Publishing, Inc.、2009年5月
- Twitter API Wiki / FrontPage(APIの一覧を掲載しているライブラリ)
- Twitter4jリポジトリ
