## Building JavaFX applications

Kawa makes it easy to build “rich client” (i.e. GUI) applications using JavaFX. For example the following program will print up a window with a button; clicking on the button will print a message on the console output about the event.

    (require 'javafx-defs)
    (javafx-application)

    (javafx-scene
     title: "Hello Button"
     width: 600 height: 450
     (Button
      text: "Click Me"
      layout-x: 25
      layout-y: 40
      on-action: (lambda (e) (format #t "Event: ~s~%~!" e))))

JavaFX support is builtin to the pre-built `kawa-2.92_invoke.jar`. It is easiest to use JDK 8; see below if you’re using JDK 7. If you build Kawa from source, specify `--with-javafx` on the `configure` command line (assuming you’re using JDK 8).

Assume the above file is `HelloButton1.scm`, you can run it like this:

    $ kawa HelloButton1.scm

For more information and examples read this (slightly older) introduction, and this on animation.

The `browse-kawa-manual` script in the `doc` directory (source only) uses JavaFX WebView to create a window for browsing the Kawa documentation.

### Using JavaFX with JDK 7

JDK 8 ships with JavaFX, and it is in the default `CLASSPATH`. JDK 7 update 9 or later does have JavaFX included, but it is a separate `jfxrt.jar` which not in the default `CLASSPATH`. Thus you have to explicitly add `jfxrt.jar`. To run the previous `HelloButton1.scm` you can do:

    java -cp $JAVA_HOME/lib/jfxrt.jar:$KAWA_HOME/kawa.jar HelloButton1.scm

If you build Kawa from source, do:

    $ ./configure --with-javafx=$JAVA_HOME --enable-kawa-frontend ...other-args...

The resulting Kawa binary sets up the path to `jfxrt.jar` so you just need to do:

    $ kawa HelloButton1.scm