JListに画像を表示する
twitter4jを使ったjavaアプリケーションでタイムラインを取得してそれをJListに表示させようとしたけれど、文字列を表示するだけならすぐにできたのですが、画像を表示させようとすると結構面倒ですね。
JList.addElement(Object object)
となっているのでここに文字列ではなく、JLabelやJPanelを渡せばすぐに表示できるのかと思っていたのですが、そうではなかったようで。。。
JListの各リスト項目を表示するルールを決めているレンダラーを定義しなおさないといけないらしい。
そのままLabelなどを渡しても、Labelの各情報を表す文字列を表示されるのはレンダラーでObject.toString()としてそれを表示するようにしているからなのでしょう。
ということで、またサンプルコード探し。
Swing再入門 レンダラーとモデル(CodeZine)
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として返せば良いような気がするからなんです。
何か不都合でもあるんでしょうか。
Swingのいい本はないでしょうかね?
今すぐ使えるかんたんTwitterツイッター入門 今話題のTwitterをもっと楽しく! Twitterの「いまさら聞けない」疑問点を一から徹底解説。Twitterの基本的な使い方から楽しみ方までバッチリ紹介。
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)
とりあえず、こんな感じで出来ました。