为什么我不能做addMouseListener(e-> {});?

Kap*_*der 2 java arrays jlabel mouselistener actionevent

我目前在这里为鼠标使用以下代码listener

    public void mousePressed(MouseEvent e) {

JLabel labelReference=(JLabel)e.getSource();
    if(labelReference.getBackground()==HighLight) {
    turn^=true;
    if(turn==true){
       labelReference.setBackground(Color.blue);
       }; 
       if(turn==false){
           labelReference.setBackground(Color.red); 
           };
      }     
}
Run Code Online (Sandbox Code Playgroud)

这可行,但是当我将鼠标侦听器添加到所有对象时,我正在尝试更改/删除该内容JLabels

Pjaser[i][j].addMouseListener(e ->{

            });
Run Code Online (Sandbox Code Playgroud)

但是似乎给我一个错误,当它addActionListener( e->{ 可以有人给我任何解决此问题的提示时,这似乎很好用

谢谢

Mad*_*mer 5

那么,让我们来看看ActionListenerMouseListener...

public interface ActionListener extends EventListener {
    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(ActionEvent e);

}

public interface MouseListener extends EventListener {

    /**
     * Invoked when the mouse button has been clicked (pressed
     * and released) on a component.
     */
    public void mouseClicked(MouseEvent e);

    /**
     * Invoked when a mouse button has been pressed on a component.
     */
    public void mousePressed(MouseEvent e);

    /**
     * Invoked when a mouse button has been released on a component.
     */
    public void mouseReleased(MouseEvent e);

    /**
     * Invoked when the mouse enters a component.
     */
    public void mouseEntered(MouseEvent e);

    /**
     * Invoked when the mouse exits a component.
     */
    public void mouseExited(MouseEvent e);
}
Run Code Online (Sandbox Code Playgroud)

好的,所以ActionListener只有一种可能的方法,其中MouseListener有5种,所以当您这样做时...

Pjaser[i][j].addMouseListener(e ->{

});
Run Code Online (Sandbox Code Playgroud)

Java应该调用哪种方法?

对于您(以及我们其他人)来说很幸运,Java开发人员也有同样的感觉,他们不想让ti实现MouseListener(或MouseMotionListeneror MouseWheelListener)的所有方法,因此他们提供了所有方法的“默认”实现,基本上只是创建方法的空实现,MouseAdapter...

Pjaser[i][j].addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
    }
});
Run Code Online (Sandbox Code Playgroud)

好的,这并不完全相同,但是它的确很容易阅读和管理