java-bridge-0.20130606.3: examples/calculator/src/calculator.hs
import Foreign.Java
import Data.Maybe
import Foreign.Java.Bindings.Support
main :: IO ()
main = runJavaGui $ do
(Just jFrameClass) <- getClass "javax.swing.JFrame"
(Just jButtonClass) <- getClass "javax.swing.JButton"
(Just jGridLayoutClass) <- getClass "java.awt.GridLayout"
setVisible <- jFrameClass `bindMethod` "setVisible" ::= boolean --> void
addComponent <- jFrameClass `bindMethod` "add" ::= object "java.awt.Component"
--> object "java.awt.Component"
setLocation <- jFrameClass `bindMethod` "setLocationRelativeTo" ::= object "java.awt.Component"
--> void
setSize' <- jFrameClass `bindMethod` "setSize" ::= int --> int --> void
let setSize obj (a, b) = setSize' obj a b
setLayout <- jFrameClass `bindMethod` "setLayout" ::= object "java.awt.LayoutManager"
--> void
addActionListener <- jButtonClass
`bindMethod` "addActionListener" ::= object "java.awt.event.ActionListener" --> void
(Just jButtonConstr) <- getConstructor jButtonClass $ string
(Just jGridLayoutConstr) <- getConstructor jGridLayoutClass $ int --> int
(Just jFrame) <- newObject jFrameClass
newObjectFrom jGridLayoutConstr 4 4 >>= setLayout jFrame
buttons <- mapM (newObjectFrom jButtonConstr)
[ "1", "2", "3", "*"
, "4", "5", "6", "-"
, "7", "8", "9", "·"
, "C", "0", "=", "÷" ]
mapM_ (addComponent jFrame) buttons
let action = do
io $ putStrLn "Let's have some fun!"
listener <- sushimaki "java.awt.event.ActionListener" action
mapM_ (flip addActionListener (Just listener) . fromJust) buttons
jFrame `setSize` (400, 300)
jFrame `setLocation` Nothing
jFrame `setVisible` True