     (.setDefaultCloseOperation frame JFrame/DISPOSE_ON_CLOSE)
     frame))
 
+
 ;;; Swing handmade concurrency
 
 (defn invoke-later

  "Defines a multi function method that is surrounded by do-swing-return"
  [name dispatch-val params & body]
  `(defmethod ~name ~dispatch-val ~params (with-swing-threads* ~@body)))

(defmacro fn-swing-threads*
  "Returns a function that is surrounded by with-swing-threads*"
  [name params & body]
  (if (vector? name)                      ;anonymous function
    `(fn ~name (with-swing-threads* ~params ~@body))
    `(fn ~name ~params (with-swing-threads* ~@body)))) ;TODO: adic overloading


;;; type checking


(defvar --- {}
  "Separator for menu entries used in add-menus.")

(defvar === (Box/createHorizontalGlue)
  "Separator between menus used in add-menus.")

