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 -~----------~----~----~----~------~----~------~--~---