Java 在Swing中,如何在没有特定组件的情况下应用KeyListener

Java 在Swing中,如何在没有特定组件的情况下应用KeyListener,java,swing,keylistener,Java,Swing,Keylistener,一般来说,我们将密钥侦听器应用于特定组件,如文本字段、密码字段等。但我希望将此侦听器行为推广到所有组件。Swing设计用于密钥绑定,可以实现您想要的功能。我会先退房。不要忘记阅读Swing教程以获取完整信息 如果这没有帮助,那么请查看一些建议。所有swing组件都是JComponent。您可以将所有这些用作JComponent: @Override public void keyTyped(KeyEvent e) { JComponent component = (JComponent)

一般来说,我们将密钥侦听器应用于特定组件,如文本字段、密码字段等。但我希望将此侦听器行为推广到所有组件。

Swing设计用于密钥绑定,可以实现您想要的功能。我会先退房。不要忘记阅读Swing教程以获取完整信息


如果这没有帮助,那么请查看一些建议。

所有swing组件都是JComponent。您可以将所有这些用作JComponent:

@Override
public void keyTyped(KeyEvent e) {
   JComponent component = (JComponent) e.getSource();
   // TODO Implements your action
}
您可以看到,这是一种有限的方法

您也可以根据来源的类别进行工作:

@Override
public void keyTyped(KeyEvent e) {
    Object source = (JComponent) e.getSource();

    if (source instanceof JTextField) {
        // TODO Implment action for JTextField
    } else if (source instanceof JTextArea) {
        // TODO Implment action for JTextArea
    }
}

根据您的需要,您可以使用反射API来执行此操作

您可能还想看看。不,一般来说,我们根本不使用KeyListener;-)请阅读API doc(提示:InputEvent有一个方法来获得比对象更窄的源类型…)@ ELDIUS考虑我的要求是这样的——我编写了一个系统托盘应用程序。默认情况下,这将最小化到系统托盘。现在我打开记事本,输入一些东西。我想捕捉这个按键事件。这是可能的吗?考虑我的要求是这样的-我写了一个系统托盘应用程序。默认情况下,这将最小化到系统托盘。现在我打开记事本,输入一些东西。我想捕捉这个按键事件。这有可能吗?我4个月后再给你打电话。