前回、ToolWindow上にテーブル(JBTable)を表示してみました。
IntelliJ Platform Pluginの開発にて、ToolWindow上で、TextFieldの入力値に従って絞り込み可能なテーブル(JBTable)を表示してみた - メモ的な思考的な
今回は、テーブルの列に画像を表示できるかためしてみたので、メモを残します。
目次
環境
- プラグインの開発環境
なお、ソースコードは前回の記事のものを引き続き使います。
表示する方法を調査
SwingのJTableにおける列の表示方法を調べたところ、以下の記事がありました。
JTable でのデータの表示方法を決める セルレンダラー - Swing の JTable の使い方 - Java の Swing を用いた GUI - Java 入門
上記記事では、セルレンダラーにより列の表示方法を決めていました。
そこで、IntelliJ Platform Plugin の場合も同じ方法で実現できるかもしれないと考え、ためしてみます。
実装
画像ファイルを resources/icons ディレクトリの中に置く
まずは描画する画像ファイルを配置します。
画像ファイルをどこに置くのが適切なのか、公式ドキュメントには見つかりませんでした。
そこで今回は、リソースっぽいファイルの置き場である resources/icons
の中に shinanogold.png
ファイルを置くことにしました。
ImageIcon で画像ファイルを参照するobjectの作成
続いて、画像ファイルを参照するobjectを作成します。
画像ファイルを参照できるようにする場合、kotlinでは ImageIcon
クラスを使うのが良さそうでした。
そこで、 ui
ディレクトリの中に AppleTableCellIcon
objectを用意し、リソースディレクトリの中に置いたファイルを参照します。
package com.github.thinkami.hellojetbrainsplugin.ui import javax.swing.ImageIcon object AppleTableCellIcon { val ShinanoGold = ImageIcon(requireNotNull(javaClass.getResource("/icons/shinanogold.png"))) }
DefaultTableCellRenderer を継承したセルレンダラーを作成
今回は、3列目が 黄
の場合のみ、画像ファイルを表示してみます。
package com.github.thinkami.hellojetbrainsplugin.ui import javax.swing.table.DefaultTableCellRenderer class AppleTableCellRenderer: DefaultTableCellRenderer() { override fun setValue(value: Any?) { if (value == "黄") { // 黄色の場合だけ、シナノゴールドのアイコンに差し替える icon = AppleTableCellIcon.ShinanoGold text = "" return } icon = null text = value.toString() } }
JBTableのcellRendererに、セルレンダラーを指定
今回は3列目に上記で作成したセルレンダラーを設定します。
row { val table = JBTable() table.model = appleTableModel table.columnModel.getColumn(2).cellRenderer = AppleTableCellRenderer() myTableModel = scrollCell(table) }
以上で実装は完了です。
動作確認
Run Pluginしてみると、3列目が 黄
の値になっている場合のみ、画像が表示されました。
前回作成した絞り込み機能を使った場合でも、正しく動作しました。
ソースコード
Githubにあげました。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin
今回のプルリクはこちら。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin/pull/15