> > http://rosettacode.org/wiki/Animation#Java.2FSwing
> I like the plain text version:-D
Yes, me too. That's the most PicoLisp-like one in my feeling :)
> I have implemented this example using my wl interpreter and added it
> into the git repository under the name swing9.l so that you can compare.
Thanks. If I start it with (load "swing9.l"), it shows the window with
the text, but it doesn't scroll. It seems that the actual scroll logic
> > (java Button "addActionListener"
> > (interface "java.awt.event.ActionListener"
> > 'actionPerformed
> > (curry (Button Frame) (Ev)
> > (java Frame "hide")
> > ...
> Your 'interface' function has two restrictions:
> 1) It can create proxy instance only for one interface while in Java,
> one can create proxy instance for many interfaces.
No. The single interface argument is just for convenience. You can also
pass a list of interfaces
(interface '("java.awt.event.ActionListener" ..)
> 2) It is not possible to create one handler for many events and be aware
> of which event was invoked.
Why not? The event is passed in as an argument and can be inspected.
> Yes, that's a limitation of Swing. If Swing was better designed, it
> would not be an issue.
> > The limitation of not being able to define a "class" proxy is more one
> > of the JVM Proxy than just of Swing, it seems.
> > Proxy.newProxyInstance() doesn't accept a normal class, just an
> > interface.
> Yes, shame. I briefly looked at how Clojure implements proxy (it
> supports both interface and class proxy) and it seems it just compiles a
> new class for it instead of going through the dynamic proxy option.
I suspected so. But I don't want to go such far. For Clojure this is
natural, as it compiles bytecodes anyway.