java keypressed keytyped,为什么在KeyListener中需要keyPressed(),KeyRelesed和keyTyped()? -Java...

I have a JFrame and I want to add a KeyListener to it, because I want to close it by typing alt + F11 (I know, you can just click the cross in the upper right corner, but there is a reason why I need a shortcut).

So I added a KeyListener:

addKeyListener(new KeyListener() {

@Override

public void keyPressed(KeyEvent event) {

if (event.getKeyCode() == KeyEvent.VK_F11 && event.isAltDown()) {

dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

}

}

@Override

public void keyReleased(KeyEvent e) {

}

@Override

public void keyTyped(KeyEvent e) {

}

});

As you can see, I only need the keyPressed() method. But if I remove keyReleased() and keyTyped(), I get this error:

The type new KeyListener(){} must implement the inherited abstract method KeyListener.keyReleased(KeyEvent)

Is there a way around it, or do I really have to add these unused methods?

Thanks in advance!

解决方案

KeyListener is an interface. If you want to implement an interface, you need to implement all of its methods (as interface doesn't provide a body to all of its methods). If you take a look at KeyListener interface in Java API documentation, you can see that it has 3 methods that need to be implemented:

void keyPressed​(KeyEvent e)

void keyReleased​(KeyEvent e)

void keyTyped​(KeyEvent e)

One of the solutions for you to avoid implementing all of the methods is to use a KeyAdapter class (from java.awt.event package). As Java documentation states:

The methods in this class are empty. This class exists as convenience for creating listener objects. Extend this class to create a KeyEvent listener and override the methods for the events of interest. (If you implement the KeyListener interface, you have to define all of the methods in it. This abstract class defines null methods for them all, so you can only have to define methods for events you care about.)

So, you could modify your addKeyListener method to something like this:

addKeyListener(new KeyAdapter() {

@Override

public void keyPressed(KeyEvent event) {

if (event.getKeyCode() == KeyEvent.VK_F11 && event.isAltDown()) {

dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

}

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要输入简单代码,你可以使用Java的IDE(集成开发环境),如Eclipse或IntelliJ IDEA。在IDE创建一个新的Java项目,然后创建一个Java类。在该类,你可以使用Java的Scanner类来接收用户的输入,并使用Java的System.out.println()方法将输出打印到控制台。 以下是一个简单的Java代码示例,用于接收用户输入的两个整数,并将它们相加并打印结果: ``` import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter the first number: "); int num1 = input.nextInt(); System.out.print("Enter the second number: "); int num2 = input.nextInt(); int sum = num1 + num2; System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum); } } ``` 关于如何在Java上制作一个简单的键盘来高效地输入JTextFields,可以使用Java的键盘监听器(KeyboardListener)来实现。你可以创建一个继承自JPanel的类,并在该类添加JTextFields,然后使用Java的键盘监听器来处理键盘事件。以下是一个简单的Java代码示例,用于在JTextField输入大写字母: ``` import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class KeyboardPanel extends JPanel implements KeyListener { JTextField textField; public KeyboardPanel() { textField = new JTextField(20); add(textField); textField.addKeyListener(this); } public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); if (keyCode >= 65 && keyCode <= 90) { char c = (char)(keyCode + 32); textField.setText(textField.getText() + c); } } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} public static void main(String[] args) { JFrame frame = new JFrame("Keyboard Panel"); frame.add(new KeyboardPanel()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 100); frame.setVisible(true); } } ``` 在这个示例,我们创建了一个KeyboardPanel类,它继承自JPanel,并添加了一个JTextField。我们还实现了KeyListener接口,这样我们可以处理键盘事件。在keyPressed方法,我们检查按下的键是否是大写字母,并将其转换为小写字母,然后将其添加到JTextField。最后我们在main方法创建了一个JFrame,并将KeyboardPanel添加到其
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值