Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用Java接口函数:还有其他可能的方法吗?_Java_Swing_Event Handling_Awt - Fatal编程技术网

调用Java接口函数:还有其他可能的方法吗?

调用Java接口函数:还有其他可能的方法吗?,java,swing,event-handling,awt,Java,Swing,Event Handling,Awt,我想让一个JPanel响应MouseEvent,比如mousePressed(),但不响应其他。 我可以通过添加到JPanel对象中的以下代码来实现这一点: addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { //Some action here } }); 但是,匿名函数要求我在其中使用final变量。我的程序规范不允许我这么做

我想让一个JPanel响应MouseEvent,比如mousePressed(),但不响应其他。 我可以通过添加到JPanel对象中的以下代码来实现这一点:

addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent me) { 
        //Some action here
      } 
    }); 
但是,匿名函数要求我在其中使用final变量。我的程序规范不允许我这么做

我还可以将MouseEvents定义为外部类,而不是内部类,但是我必须为MouseListener接口中的所有函数提供实现,例如mouseClicked()、mouseenterned()、mouseExited()等

有没有其他方法可以实现我要做的事情,即定义mousePressed()函数,而不必在其中使用最终变量,也不必在接口中定义其他函数

非常感谢

编辑:我意识到我提供的代码运行正常,因为内部类正在创建一个抽象类MouseAdapter的对象

然而,我的问题仍然存在:如果我不想定义抽象类的所有方法,也不必使用内部类,有没有办法做到这一点?

下面是一个例子:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass extends JPanel {

  public MainClass() {

      addMouseListener(new MouseAdapter() { 
          public void mousePressed(MouseEvent me) { 
            System.out.println(me); 
          } 
        }); 

  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new MainClass());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(200, 200);
    frame.setVisible(true);
  }
}

此外,您还可以使用官方教程。

“定义mousePressed()函数而不必在其内部使用最终变量”-使用实例字段而不是局部变量只需说
类MyListener扩展了“外部”类中的MouseAdapter,你只需要实现一个你想要覆盖的函数,阅读我上面的评论。内部阶级不是魔法;上面的代码只定义了一个扩展MouseAdapter的未命名(匿名)类。您还可以从命名类扩展MouseAdapter,并具有与MouseAdapter已经实现抽象方法相同的行为。您“不允许”使用的最终变量具体是什么?@ErwinBolwidt,如果我这样做,我不需要为MouseAdapter中的其他方法(抽象类)提供定义吗?我不希望我的类是抽象的。+1,但是内部类MouseAdapter()仍然只允许修改最终变量。@chrylis提供的解决方案非常简洁。感谢您的评论!