最新トレンドを表示する
サンプルアプリケーションで最後に残った要素は、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
に渡します。画面の表示はこのようになります。
![図9 最新トレンドパネル](http://cz-cdn.shoeisha.jp/static/images/article/4409/09s.gif)
全体を組み立てる
これですべてのクラスが定義されました。後は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リポジトリ