Created
February 9, 2009 16:21
-
-
Save Chouser/60851 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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