On Thu, Feb 19, 2009 at 9:09 AM, Eric Thorsen <[email protected]> wrote:
>
> In some cases, the Java classes give you an interface where you have
> to do all kinds of shenanigans to handle various cases (like the cell
> renderer) where a call to a multi-method would be so much cleaner
> (IMO). I really just wanted to create a stub class for this 1x. The
> above was not bad since it was just 1 function.
> Anyone else doing similar things?
I've done such shenanigans with JTable cells and proxy, though a
multimethod was a poor fit in my case:
(.setDefaultRenderer table Object
(proxy [DefaultTableCellRenderer] []
(getTableCellRendererComponent [tbl obj isSelected hasFocus r c]
(let [{:keys [level]} (nth rows r)]
(doto this
(.setForeground (condp > level
0 Color/white
10 Color/blue
20 Color/red
30 Color/magenta
Color/black))
(.setText (str obj)))))))
If you need access to a super class method, you can use proxy-super.
This, for example, is a really wordy way to do essentially nothing:
(.setDefaultRenderer table Object
(proxy [DefaultTableCellRenderer] []
(getTableCellRendererComponent [tbl obj isSelected hasFocus r c]
(proxy-super getTableCellRendererComponent
tbl obj isSelected hasFocus r c))))
--Chouser
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---