0

背景画像を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)
4

1 に答える 1

0

間違いは次の行です。

 (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
于 2012-06-18T16:38:51.633 に答える