【问题标题】:I want to implement Key Listener on jlabel我想在 jlabel 上实现 Key Listener
【发布时间】:2014-03-22 10:15:03
【问题描述】:

我在我的 JFrame 对象上添加了 JLabel。我想在 JLabel 上实现一个关键监听器。我可以实施吗?如果是,我该怎么做?

【问题讨论】:

  • KeyListener 不是可聚焦的 JComponents,不是专门为这个想法设计的,KeyListener 没有在 JLabels API 中实现
  • 暂时忘记你想要的。您试图为用户提供什么功能?这听起来像是经典的XY problem
  • 你想用那个 Listener 做什么?

标签: java swing jlabel keylistener


【解决方案1】:

您可能不想在JLabel 上添加KeyListener。如果您将其添加到JFrame 会更好。
假设您具有以下代码结构,那么它应该可以工作:

public class MyFrame extends JFrame {
    private JLabel jLab;
    //...fields, getters, setters whatever...
    private int i;
    public MyFrame()
    {
        i = 0;
        jLab = new JLabel("Example");
        addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(KeyEvent ke) {
                //doSomething(); - this may create confusion.
            }
            @Override
            public void keyReleased(KeyEvent ke) {
                //doSomething(); - this may create confusion.
            }
            @Override
            public void keyTyped(KeyEvent ke) {
                doSomething();
            }
        });
        add(jLab);
        pack();
        setVisible(true);
    }

    private void doSomething() {
        i++;
        jLab.setText(i + "");
    }
}

还有,别忘了import

import javax.swing.*;
import java.awt.event.*;

结果:当您在 main() 方法中创建新的 MyFrame 时。这是你最初看到的:

五次随机击键后,

【讨论】:

  • 请确保发布的代码实际编译。即使是进口也不会。
  • 请删除此答案,JLabel(和 JFrame)无法接收任何 KeyEvents,simple 不可用,然后无法对 KeyEvents 做出反应
  • public MyFrame extends JFrame { -> error: class, interface, or enum expected
  • @AndrewThompson 哎呀! :-) 感谢您的帮助。现在它可以完全编译并正常工作。
  • 这将适用于框架而不是标签如果有多个标签怎么办???不要使用这个...
【解决方案2】:

我想我有点太晚了,但是在将key listener 添加到label 之后调用label.requestFocus(); 对我有用!

【讨论】:

    【解决方案3】:

    当用户按下或释放键盘按键时,具有键盘焦点的组件会触发按键事件。

    但是 JLabel 不是这些组件之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2014-01-17
      相关资源
      最近更新 更多