I'm working on a little Swing application and am in need of some assistance. I have an inline class for a MouseListener and inside one of the methods I would like to call a method in the parent class, however, this
is an instance of the MouseListener.
class ParentClass
{
void ParentMethod()
{
//...
swing_obj.addMouseListener(
new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
//Want to call this.methodX("str"), but
//this is the instance of MouseListener
}
public void mouseEntered(MouseEvent e){ }
public void mouseExited(MouseEvent e){ }
public void mousePressed(MouseEvent e){ }
public void mouseReleased(MouseEvent e){ }
}
);
//...
}
void methodX(String x)
{
//...
}
}
Any assistance would be appreciated.
Even though
this
is an instance of the anonymous type, you should still be able to callmethodX("str")
- just don't prefix it withthis
.If you want to be explicit, I think there is some syntax which lets you do it - you can write
but personally I wouldn't bother being explicit unless you really have to (e.g. to disambiguate the call from a method in
MouseListener
).You do not need to do anything but to remove
this
from the call.If you still want to use
this
you have to have the prefixParentClass
. E.g.ParentClass.this.methodX(...)
... But that's just ugly and should be used when needed (naming collisions etc).As other have stated, simply remove
this.
and you should be able to call method in the outer class. In those rare cases when the outer class and the nested class have methodS with THE same name and parameter list you call it withOuterClass.this.someMehtod(...);
.For cleaner code when writing anonymous inner classes, I advice you to use adapters. For many of Swings interfaces, there's abstract adapters implementing them and you only override the methods of interest. In this case it would be
MouseAdapter
: