http://ironalbatross.net/wiki/index.php5?title=Clojure_Swing
Clojure Swing
Contents |
Clojure Swing
TODO: Add a *little* bit of explanation to some examples. Maybe put things in code tags...
Stand-alone Label
(import '(javax.swing JLabel JFrame)) (def jlabel (new JLabel "Hello world")) (def frame (new JFrame)) (. frame setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) (. frame add jlabel) (. frame pack) (. frame setVisible true)
Inline Label
(import '(javax.swing JLabel JFrame)) (def frame (new JFrame)) (. frame setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) (. frame add (new JLabel "Hello world")) (. frame pack) (. frame setVisible true)
Shortened with "doto"
(import '(javax.swing JLabel JFrame))
(def frame
(doto
(new JFrame)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add (new JLabel "Hello world"))
(.pack)
(.setVisible true)))
Stand-alone Button
(import '(javax.swing JButton JFrame)
'(java.awt.event ActionEvent ActionListener))
(def button (new JButton "Hello world"))
(. button addActionListener
(proxy [ActionListener] []
(actionPerformed [e] (println "Button Pressed"))))
(def frame
(doto
(new JFrame)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add button)
(.pack)
(.setVisible true)))
Inlined Button with simple Print action
(import '(javax.swing JButton JFrame)
'(java.awt.event ActionEvent ActionListener))
(def frame
(doto
(new JFrame)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add
(doto
(new JButton "Hello World")
(.addActionListener
(proxy [ActionListener] []
(actionPerformed [e] (println "Button Pressed"))))))
(.pack)
(.setVisible true)))
Large JPanel
(import '(javax.swing JFrame JPanel)
'(java.awt Dimension))
(def panel (JPanel.))
(.setPreferredSize panel (new Dimension 800 800))
(def frame
(doto
(JFrame.)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true)))
Panel with simple on-click event
(import '(javax.swing JButton JFrame JPanel)
'(java.awt.event ActionEvent ActionListener MouseAdapter)
'(java.awt Graphics Dimension Color)
'(java.awt.image BufferedImage))
(def panel
(doto
(JPanel.)
(.setPreferredSize (new Dimension 800 800))
(.addMouseListener
(proxy [MouseAdapter] []
(mousePressed [e] (println "Mouse clicked"))
(mouseReleased [e] '())))))
(def frame
(doto
(JFrame.)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true)))
Panel with simple keyboard action
Added a simple action for pressing F2
(ns lode-stone.core)
(import '(javax.swing JButton
JFrame
JPanel
InputMap
JComponent
KeyStroke
Action
AbstractAction)
'(java.awt.event ActionEvent
ActionListener
KeyEvent
ActionListener)
'(java.awt Graphics Dimension Color)
'(java.awt.image BufferedImage))
(def myAction
(proxy [AbstractAction ActionListener] []
(actionPerformed [e] (println "Action performed!"))))
(def panel
(doto
(proxy [JPanel] []
(paint [g] nil))
(.setPreferredSize (new Dimension 800 800))
(.. (getInputMap) (put (KeyStroke/getKeyStroke "F2") "action"))
(.. (getInputMap) (put (KeyStroke/getKeyStroke \a) "action"))
(.. (getActionMap) (put "action" myAction))))
(def frame
(doto
(JFrame.)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true)))
(println "Press 'F2' to perform a simple action")
Added a Menu bar
Added a trivial (non-functional) menu. Also moved everything into a "main."
(ns lode-stone.core)
(import '(javax.swing JButton
JFrame
JPanel
InputMap
JComponent
KeyStroke
Action
AbstractAction
JMenuBar
JMenu
JMenuItem)
'(java.awt.event ActionEvent
ActionListener
MouseAdapter
MouseMotionListener
MouseEvent
KeyEvent
ActionListener)
'(java.awt Graphics Dimension Color)
'(java.awt.image BufferedImage))
(defn main []
(do
(def menuBar
(doto (JMenuBar.)
(.add (doto (JMenu. "File")
(.add (JMenuItem. "New"))))))
(def myAction
(proxy [AbstractAction ActionListener] []
(actionPerformed [e] (println "Action performed!"))))
(def panel
(doto (proxy [JPanel] []
(paint [g] nil))
(.setPreferredSize (new Dimension 800 800))
(.. (getInputMap) (put (KeyStroke/getKeyStroke "F2") "action"))
(.. (getInputMap) (put (KeyStroke/getKeyStroke \a) "action"))
(.. (getActionMap) (put "action" myAction))))
(def frame
(doto (JFrame.)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setJMenuBar menuBar)
(.add panel)
(.pack)
(.setVisible true)))
(println "Press 'F2' to perform a simple action")
)
)
(main)
(ns lode-stone.core)
(import '(javax.swing JButton
JFrame
JPanel
JMenuBar
JMenu
JMenuItem
AbstractAction)
'(java.awt.event ActionListener)
'(java.awt Graphics Dimension))
(defn main []
(do
(def menuActionListener
(proxy [ActionListener] []
(actionPerformed [e] (println "A menu even happened: " e))))
(def menuBar
(doto (JMenuBar.)
(.add (doto (JMenu. "File")
(.add (doto (JMenuItem. "New")
(.addActionListener menuActionListener)))))))
(def myAction
(proxy [AbstractAction ActionListener] []
(actionPerformed [e] (println "Action performed!"))))
(def panel
(doto (proxy [JPanel] []
(paint [g] nil))
(.setPreferredSize (new Dimension 800 800))))
(def frame
(doto (JFrame.)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setJMenuBar menuBar)
(.add panel)
(.pack)
(.setVisible true)))
)
)
(main)
'Programming' 카테고리의 다른 글
| (Clojure) Redirecting *out* to JFrame, TextArea, etc. (0) | 2012.12.24 |
|---|---|
| (Java) Redirecting System.out and System.err to JTextPane or JTextArea (0) | 2012.12.23 |
| Clojure 강좌 (0) | 2012.12.18 |
| Pick Your Battles (0) | 2012.12.17 |
| Invent Your Own Computer Games with Python (0) | 2012.12.16 |