Java 如何在clojure中向JTable添加图像背景

Java 如何在clojure中向JTable添加图像背景,java,clojure,clojure-java-interop,Java,Clojure,Clojure Java Interop,我用clojure编写了这个程序,将背景图像添加到JTable中。我一直在使用prepareRenderer函数。clojure似乎无法处理与Java TableCellRenderer rd等效的第一个参数rd。我可能在这里做错了,如果有人能帮助我解决这个问题,我将非常感激。要运行该程序,只需将其保存到tabletest.clj文件中,并在clojure提示符处键入: (load-file "tabletest.clj") 如果注释掉prepareRenderer函数,则可以在不查看背景图像

我用clojure编写了这个程序,将背景图像添加到JTable中。我一直在使用prepareRenderer函数。clojure似乎无法处理与Java TableCellRenderer rd等效的第一个参数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)

错误是这样的:

 (proxy-super rd row col)
正确的编码方法是:

 (def c (proxy-super prepareRenderer [rd row col]))
而台词:

 (.setOpaque this false)
 this
替换为:

 (if (instance? JComponent c)
     (.setOpaque c false))
 c