当前位置: 首页 > 知识库问答 >
问题:

java中用于对mouseclick作出反应的函数接口[重复]

严俊友
2023-03-14

我有一个棘手的任务要在Java中完成。我必须用作为lambda表达式传递的代码对mouseclick做出反应(在控制台打印'OK')。问题是我不能修改主类,我必须准备类/接口来接收lambda表达式。我试着去学习Lambda表达式的教程,但是我不断地得到关于使用非函数接口的错误。主:

import javax.swing.*;

public class Main {

  public static void main(String[] args) {
    SwingUtilities.invokeLater( ()-> {
        JFrame f = new JFrame();
        JButton b = new JButton("Mouse Click");
        b.addMouseListener ( (MousePressListener) e -> System.out.println("ok") );
        f.add(b);
        f.pack();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setVisible(true);
      }
    );
  }
}

你们有更多经验的人能给我一些建议,我如何开始处理这个问题?我开始创建一个类,但后来就迷路了(我创建了这个类,并且使用了'implements',所以现在键入MousePressListener也是MouseListener,对吗?)

public class MousePressListener implements MouseListener {

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}

共有1个答案

裴展
2023-03-14

对于除mouseclicked之外的所有内容,使用具有默认方法的接口而不是类:

@FunctionalInterface
public interface MousePressListener extends MouseListener
{
  @Override
  default public void mouseEntered(final MouseEvent e) {
  }

  @Override
  default public void mouseExited(final MouseEvent e) {
  }

  @Override
  default public void mousePressed(final MouseEvent e) {
  }

  @Override
  default public void mouseReleased(final MouseEvent e) {
  }
}

因此,现在mousepresslistener是一个只有一个非默认方法的接口,这是函数接口所需的。这可以在根本不更改main类的情况下使用。

 类似资料:
  • 我正在调用react组件中的函数 在我的createComment函数中,“”未定义 我需要在createComment函数中调用this.setState。如何使成为组件的this??

  • 逻辑运算符 import operator a = -1 b = 5 print('a =', a) print('b =', b) print() print('not_(a) :', operator.not_(a)) print('truth(a) :', operator.truth(a)) print('is_(a, b) :', operator.is_(a,

  • 我在React函数组件和默认所需道具方面遇到问题。 以下是组件: 我应该能够在不传递道具: 但是,TypeScript引发类型错误属性“message”在类型“{}”中丢失,但在类型“Props”中是必需的: 下面是代码沙盒中的问题:https://codesandbox.io/s/still-microservice-lp7b5?fontsize=14 我不确定我是做错了什么,还是这是打字稿中的

  • 这在React版本0.12中工作得非常好: 变量获取呈现组件的实际DOM节点。但是,将其转换为React 0.13并不像预期的那样工作: 我尝试了React.findDOMNode(this),它也不起作用。基本上,我只是试图获取由渲染函数渲染的顶级dom节点,而不使用ref。这有可能吗?

  • 我在网上找不到任何关于这个话题的东西。有没有办法告诉你的机器人对旧消息做出反应?类似的东西: 1-烤面包机:嘿 2-乔纳森:!!反应 会让机器人对烤面包机说“嘿”做出反应吗?或者做一些更老的事情,比如对消息作出反应5条消息向上。我没有这方面的代码,但我知道不和谐。js很好,并且知道如何正常地向消息添加反应。

  • 我是新的TypeScript。我想通过打字稿的接口来反应状态,然后呈现状态。但是我不知道如何传递接口值来反应状态。