背景画像をJTableに追加するために、このプログラムをclojureで作成しました。私はprepareRenderer
機能にこだわっています。clojure は最初のパラメーターrd
(同等の Java TableCellRenderer rd
) を処理できないようです。ここですべて間違っていた可能性があります。誰かがこの問題を解決するのを手伝ってくれれば、とても感謝しています。プログラムを実行するには、tabletest.clj
ファイルに保存し、clojure プロンプトで次のように入力します。
(load-file "tabletest.clj")
関数をコメントアウトするとprepareRenderer
、背景画像を表示せずにコードを正常に実行できます。
JTable の背景用に独自の画像ファイルを提供してください。プログラムは以下のとおりです。
(import '(javax.swing JFrame JTable JPanel JScrollPane)
'(javax.swing.table DefaultTableModel TableCellRenderer)
'(java.awt Component BorderLayout Dimension Image))
(import javax.imageio.ImageIO)
(import java.io.File)
(defn tabletest []
(let [tableData (to-array-2d [
["numbers" "67890" "This"]
["mo numbers" "2598790" "is"]
["got Math" "2598774" "a"]
["got Numbers" "1234567" "Column"]
["got pi" "3.1415926" "Apple"]
])
colNames (to-array ["Col Labels" "Go" "Here"])
frame (JFrame. "Table Example")
panel (JPanel.)
sP (JScrollPane.)
dataModel (DefaultTableModel. tableData colNames)
table (proxy [JTable] [dataModel]
(prepareRenderer [rd row col] ; problem starts here
(proxy-super rd row col) ; Don't know how to translate
; Java code below to clojure:
(.setOpaque this false) ;if (c instanceof JComponent)
; ((JComponent)c).setOpaque(false);
this
)
(paintComponent [g2d]
;(proxy-super paintComponent g2d)
(def image (ImageIO/read (File. "GreenCar.png")))
(.drawImage g2d image 0 0 this)
(proxy-super paintComponent g2d)
)
)
]
(.setCellSelectionEnabled table true)
(.setOpaque table false)
(.setPreferredSize sP (Dimension. 300 150))
(.setView (.getViewport sP) table)
(.add panel sP)
(doto frame
(.setLayout (BorderLayout.))
(.add panel BorderLayout/CENTER)
(.setSize 400 200)
(.setVisible true)
)
)
)
(tabletest)