0
我在clojure中编写了此程序以将背景图像添加到JTable。我坚持使用prepareRenderer
函数。似乎clojure无法处理第一个参数rd
(等效Java TableCellRenderer rd
)。如果有人能帮我解决这个问题,我可能在这里做得很糟糕,我非常感激。要运行该程序只是将其保存到一个文件tabletest.clj
和类型在Clojure的提示:如何在clojure中将图像背景添加到JTable中
(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)