There's already a miglayout wrapper in contrib.  It seemed usable when
I looked at it.

On Jun 22, 7:35 am, Laurent PETIT <laurent.pe...@gmail.com> wrote:
> Hi,
>
> BTW, if it can be an option for you, there's also the MigLayout layout
> manager (http://www.miglayout.com/) that allows to write constraints
> as Strings. It has already been mentioned on this ml, so maybe there's
> clojure stuff done for integrating it more closely with clojure ?
>
> HTH,
>
> --
> Laurent
>
> 2009/6/18 James Koppel <darmanith...@gmail.com>:
>
> > Thanks! Seems I forgot java.lang.reflect exists when I wrote that.
>
> > On Wed, Jun 17, 2009 at 4:47 PM, Michael Reid <kid.me...@gmail.com> wrote:
>
> >> On Mon, Jun 15, 2009 at 9:13 AM, Parth<parth.malwan...@gmail.com> wrote:
>
> >> > On Jun 15, 7:08 am, James Koppel <darmanith...@gmail.com> wrote:
> >> >> I am trying to write a function to simplify working with
> >> >> GridBagConstraints
> >> >> -- that is, instead of writing
>
> >> >> (let [c (GridBagConstraints.)]
> >> >>     (set! (.weightx c) 2.0)
> >> >>     (set! (.gridwidth c) GridBagConstraints/REMAINDER)
> >> >>     (let [button (JButton. "Hello, world!")]
> >> >>       (.setConstraints (.getLayout *my-container*) button c)
> >> >>       (.add *my-container* button)))
>
> >> >> I could simply write
>
> >> >> (gridbag-add *my-container*
> >> >>                   (JButton. "Hello, world!")
> >> >>                   "weightx=2.0;gridwith=GridBagConstraints/REMAINDER")
>
> >> >> A simple combination of regexes and read-string would easily allow me
> >> >> to
> >> >> extract the symbol 'GridBagConstraints/REMAINDER from the example
> >> >> string,
> >> >> but I'm having trouble actually converting it into its value. Using
> >> >> resolve
> >> >> simply returns nil, and getting "." to work dynamically seems to be
> >> >> fruitless, as even this simple call
>
> >> >> (. (resolve 'GridBagConstraints) REMAINDER)
>
> >> >> throws an exception.
>
> >> >> So, the question is, how do I go dynamically from a string like
> >> >> "GridBagConstraints/REMAINDER" to the actual value of the static field?
>
> >> >> Of course, eval does the trick, but I'd rather not have to resort to
> >> >> it.
>
> >> > One way to do that would be to use a map:
>
> >> > user=> (def m {"Math/PI" Math/PI "Math/E" Math/E})
> >> > #'user/m
> >> > user=> (defn foo [n s] [n (get m s :not-found)])
> >> > #'user/foo
> >> > user=> (foo 10 "Math/PI")
> >> > [10 3.141592653589793]
> >> > user=>
>
> >> > You could also consider writing a function that takes these
> >> > as parameters and returns the updated container. That way
> >> > you can avoid the regex.
>
> >> > Regards,
> >> > Parth
>
> >> Not sure if this can be fit in with what you're trying to do, but you
> >> can accomplish this with a macro:
>
> >> user=> (defmacro resolve-sym-str [s] (let [[ns sym] (.split s "/")]
> >> (symbol ns sym)))
> >> #'user/resolve-sym-str
> >> user=> (resolve-sym-str "Math/PI")
> >> 3.141592653589793
> >> user=>
>
> >> However, looking at this further, it seems that the first part of what
> >> you have tried works:
>
> >> user=> (import '(java.awt GridBagConstraints))
> >> nil
> >> user=> (resolve 'GridBagConstraints)
> >> java.awt.GridBagConstraints
>
> >> Now you can use Java's reflection API to grab the field you want:
>
> >> user=> (-> (resolve 'GridBagConstraints) (.getDeclaredField
> >> "REMAINDER") (.get nil))
> >> 0
>
> >> So it would appear this is possible without a macro, which probably
> >> makes it easier to use.
>
> >> /mike
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to