4

I have a Class, which contains inner class. I want to send value, which equals to the top class, but "this" sends the value of inner class. What can I do?

package Controller;
public class MessageFrameListener{
private MessageFrame mf;
private User us;
private Contact cn;
private Timer timer;
private Running run;
private ListFrame lf;

public MessageFrameListener(ListFrame l_f, MessageFrame m_f, User u_s, Contact c_n, Running r_n){
    run = r_n;
    mf = m_f;
    us = u_s;
    cn = c_n;
    lf = l_f;
    m_f.addButtonListener(new SButtonListener());
    m_f.addWinListener(new FrameListener());

    timer = new Timer(500,new timerListener());
    timer.start();
}


public class FrameListener implements WindowListener{

    @Override
    public void windowClosing(WindowEvent e) {
        timer.stop();
        timer = null;
        mf.close();
        lf.removeMFL(this));
    }       
}
}

So, this line

        lf.removeMFL(this));

sends "FrameListener" by this, but I want to send "MessageFrameListener"

146 percent Russian
  • 2,016
  • 2
  • 14
  • 20

3 Answers3

8

Use the qualified this:

MessageFrameListener.this
Malcolm
  • 41,014
  • 11
  • 68
  • 91
1

Use:

   lf.removeMFL(MessageFrameListener.this);
Tony the Pony
  • 40,327
  • 71
  • 187
  • 281
1

Within the inner class itself, you can use

MessageFrameListener.this;

You can also add a method to the outer class

public MessageFrameListener getInstance() {
    return this;
}
Basilio German
  • 1,801
  • 1
  • 13
  • 22