在actionPerformed中运行“this”方法 - JButton?

时间:2014-03-10 04:26:08

标签: java swing jbutton

我有一个JButton,我添加了一个actionPerformed,我试着写一个"这个"方法,它不会允许它。我怎样才能做到这一点?这是我想要做的例子:

public void methodName(String results) {
    this.results = results;
}

Button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
                    this.methodName(asdf);                                                 
}

4 个答案:

答案 0 :(得分:3)

因为它是一个匿名类,所以使用this将引用匿名类实例,而不是整个类。为了解决这个问题,请表示你想特别引用你的外部类:

Something some = new Something() {

    public void overridden() {
        YourClass.this.methodName("test");
    }

};

答案 1 :(得分:0)

你的班级是匿名的,所以在匿名语境中,this没有任何意义。你this是什么意思?如果您的意思是按钮,则答案为event.getSource()

答案 2 :(得分:0)

在您的代码中,this在您调用方法时会引用您的ActionListener

如果您想从封闭类中调用methodName(),您有两种选择:

  • 删除this

    Button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            methodName(asdf);                                                 
    }
    
  • 存储对封闭类的引用并使用它:

    final MyClass enclosingClass = this;
    Button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            enclosingClass.methodName(asdf);                                                 
    }
    

答案 3 :(得分:0)

您不能在内部类中使用“this”关键字来访问外部类方法。如果我们使用它,那么它将引用内部类。而不仅仅是使用方法名称。参见示例。


    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;


    public class TestButton
    {
      String results = "";
      JButton Button = new JButton();

      public TestButton(){
        Button.addActionListener(new ActionListener()
        {

          @Override
          public void actionPerformed(ActionEvent e)
          {
               methodName("Test");  
               this.show();
          }

          public void show(){
            System.out.println("hi");
          }
        });
      }

      public void methodName(String results) 
      {
        this.results = results;
      }


    }