|
|
Detecting overridden methods..
I was just writing a multi-line comment for some code for
appleteer, about a little hack that is intended to overcome
a problem with the current version.
/* This little hack allows us to overcome the 'applet overwrites
everything' (e.g. scroll bars, menus) problem seen in early
versions of the program, but only for Swing applets that 'do
not override paint'. That latter part is hard to detect, but we
take the simple approach of counting the numbers of
components in the root and content panes. If these are
more than for a blank applet (i.e. 'components have been
added'), it is presumed the applet does not override paint. */
The hack then (presuming no override of paint()) adds the
JApplet's rootpane to the AppletLoaderContainer, instead of
the applet itself.
Are there better ways to detect if an arbitrary Swing applet
overrides paint(Graphics)?
(Or any method, of any class, for that matter.)
--
Andrew T.
pscode.org
|
|
0
|
|
|
|
Reply
|
andrewthommo (2516)
|
6/2/2009 5:25:19 AM |
|
Andrew Thompson wrote:
> Are there better ways to detect if an arbitrary Swing applet
> overrides paint(Graphics)?
>
> (Or any method, of any class, for that matter.)
Wouldn't you be able to get this with reflection and
getDeclaredMethod()? I didn't double check but I think that's the intent.
|
|
0
|
|
|
|
Reply
|
markspace (954)
|
6/2/2009 5:50:19 AM
|
|
On Jun 2, 3:50=A0pm, Mark Space <marksp...@sbc.global.net> wrote:
> Andrew Thompson wrote:
> > Are there better ways to detect if an arbitrary Swing applet
> > overrides paint(Graphics)?
>
> > (Or any method, of any class, for that matter.)
>
> Wouldn't you be able to get this with reflection and
> getDeclaredMethod()?
I mistakenly thought that would not work, since
both the applet and it's subclass should have access
to the Method. But my initial assumption was wrong,
as this code supports. Comment out the overridden
method to see an NSME stacktrace.
<sscce>
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import java.lang.reflect.*;
public class TestAppletOverride extends JApplet {
public void start() {
try {
Method testAppletPaint =3D
this.
getClass().
getDeclaredMethod("paint", Graphics.class);
JOptionPane.showMessageDialog(
this,
testAppletPaint.getDeclaringClass());
} catch(NoSuchMethodException nsme) {
nsme.printStackTrace();
}
}
@Override
public void paint(Graphics g) {
g.setColor(Color.YELLOW);
g.fillRect(0,0,getWidth(),getHeight());
}
}
</sscce>
That is one nasty hack, straight out the door. :-)
Thanks!
--
Andrew T.
pscode.org
|
|
0
|
|
|
|
Reply
|
andrewthommo (2516)
|
6/2/2009 6:25:21 AM
|
|
|
2 Replies
46 Views
(page loaded in 0.052 seconds)
|
|
|
|
|
|
|
|
|