Detecting overridden methods..

  • Thread starter Andrew Thompson
  • Start date
A

Andrew Thompson

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.)
 
M

Mark Space

Andrew said:
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.
 
A

Andrew Thompson

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 =
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!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,981
Messages
2,570,187
Members
46,731
Latest member
MarcyGipso

Latest Threads

Top