Skip to content

Instantly share code, notes, and snippets.

@Chouser
Created February 9, 2009 16:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Chouser/60851 to your computer and use it in GitHub Desktop.
Save Chouser/60851 to your computer and use it in GitHub Desktop.
(import '(javax.swing JFrame JPanel JScrollPane JTable SwingUtilities)
'(javax.swing.table AbstractTableModel DefaultTableCellRenderer)
'(java.awt Dimension GridLayout Font Color)
'(java.awt.event MouseAdapter)
'(java.sql DriverManager))
(def table (JTable.))
(SwingUtilities/invokeLater
(fn []
(doto (JFrame. "demo")
(setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(setContentPane
(doto (JPanel. (GridLayout. 1 0))
(setOpaque true)
(add (JScrollPane.
(doto table
(setPreferredScrollableViewportSize
(Dimension. 500 70))
(setFillsViewportHeight true))))))
(pack)
(setVisible true))))
(def conn
(DriverManager/getConnection "jdbc:postgresql:ivytech" "postgres" "system"))
;(DriverManager/getConnection "jdbc:postgresql:my-db-name" "my-user-name" "my-password"))
(defn query-vec [sql]
(with-open stmt (.createStatement conn)
(vec (resultset-seq (.executeQuery stmt sql)))))
(def rows (query-vec "SELECT * FROM LogB"))
(defn model [rows col-names value-at]
(proxy [AbstractTableModel] []
(getRowCount [] (count rows))
(getColumnCount [] (count col-names))
(getColumnName [c] (nth col-names c))
(getValueAt [r c] (value-at r c))
(isCellEditable [r c] false)))
(.setModel table (model rows
["foo" "bar" "baz"]
(fn [r c] (str r ", " c))))
(.setModel table (model rows
["record"]
(fn [r c] (prn-str (nth rows r)))))
(.setModel table (model rows
(vec (map str (keys (first rows))))
(fn [r c] ((nth rows r) (nth (keys (first rows)) c)))))
(.setModel table (model rows
["Time" "Source" "Message"]
(fn [r c] (let [row (nth rows r)]
((nth [#(:createtime row)
#(str (:path row) ":" (:line row))
#(:buffer row)] c))))))
(.setDefaultRenderer table Object
(proxy [DefaultTableCellRenderer] []
(getTableCellRendererComponent [tbl obj isSelected hasFocus r c]
(let [{:keys [level]} (nth rows r)]
(doto this
(setForeground (cond (<= level 0) Color/white
(<= level 10) Color/blue
(<= level 20) Color/red
(<= level 30) Color/magenta
:else Color/black))
(setText (str obj)))))))
(.addMouseListener table
(proxy [MouseAdapter] []
(mouseClicked [e]
(when (== (.getClickCount e) 1)
(let [p (.getPoint e)
r (.rowAtPoint table p)
c (.columnAtPoint table p)]
(prn "click row " r)
(flush))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment