JListに画像を表示する
twitter4jを使ったjavaアプリケーションでタイムラインを取得してそれをJListに表示させようとしたけれど、文字列を表示するだけならすぐにできたのですが、画像を表示させようとすると結構面倒ですね。
JList.addElement(Object object) となっているのでここに文字列ではなく、JLabelやJPanelを渡せばすぐに表示できるのかと思っていたのですが、そうではなかったようで…
JListの各リスト項目を表示するルールを決めているレンダラーを定義しなおさないといけないらしい。
そのままLabelなどを渡しても、Labelの各情報を表す文字列を表示されるのはレンダラーでObject.toString()としてそれを表示するようにしているからなのでしょう。
ということで、またサンプルコード探し。
JList (Java Platform SE 6) レンダラーでJListの表示をカスタマイズ! - [Javaプログラミング](All About)
class SomeThing extends JLabel implements ListCellRenderer というふうにListCellRendererインターフェースを実装するクラスを作るということなのですが、JLabelやJPanelを継承する必要はあるのでしょうか?
確かにJava公式のリファレンスJavaDocでそのようにしているわけですから間違いはないと思いますが。
理由は上のようなクラスの中でオーバライドするメソッド public Component getListCellRendererComponent( JList list, // the list Object value, // value to display int index, // cell index boolean isSelected, // is the cell selected boolean cellHasFocus) // does the cell have focus の中でJLabelやJPanelを定義して、これを返り値のComponentとして返せば良いような気がするからなんです。
何か不都合でもあるんでしょうか。
Twitter就活 「内定なう」の時代がやってきた! Twitterは就活の最強ツールだ! Twitterを使った企業研究、OB・OG訪問、自己PR、エントリーシート対策、面接対策などのやり方を伝授する。また、企業・採用担当者のTwitter活用法も紹介。
Java Swing Hacks 今日から使える驚きのGUIプログラミング集 原タイトル:Swing hacks Joshua Marinacci/著 Chris Adamson/著 神戸博之/監訳 島田秋雄/監訳 加藤慶彦/訳 グラフィックJava2〈Vol.2〉Swing編(下) (サンソフトプレスシリーズ) Java GUIプログラミング さらにパワーアップしたSwing(3)
とりあえず、こんな感じで出来ました。