【发布时间】:2020-04-24 08:35:32
【问题描述】:
我尝试使用 lambda 函数将 KeyListener KeyTyped 添加到我的 JTextField 中,就像我对动作侦听器所做的那样:
cmp_btn.addActionListener(e -> actionPerformed(e));
private void actionPerformed(ActionEvent e)
{
// Do something ...
}
如果我使用 addKeyListener(e -> keyPerformed(e)); 尝试它,我会收到错误“提供 lambda 参数”,但返回的是“必需类型:KeyEvent”。
函数如上图,但参数KeyEvent e。
// 编辑 1: 我刚刚看到,addKeyListener 需要一个 KeyAdapter。由于 KeyAdapter 是一个抽象类,我需要实例化一个 KeyAdapter 以使其工作,但如果我这样做了,那么我再次拥有内联函数(我不想要它,因为重用了该函数)。有没有办法从内联块中提取定义的函数?
// 编辑 2: 该问题的可能(丑陋)解决方案是:
cmp_textfield.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e)
{
super.keyTyped(e);
My_KeyTyped_Method(e);
}
});
有没有更好的办法?
【问题讨论】:
标签: java swing lambda keylistener