0

我创建了一个自定义类,它扩展了 JTextField 并实现了 KeyListener。这是我的课的摘录:

public class ChatBox extends JTextField implements KeyListener {
private boolean hidden;

public ChatBox(int x, int y, boolean hidden, MapFrame parent)
{
    setBounds(x,y,300,30);
    setBackground(new Color(255,255,255,40));
    parent.addKeyListener(this);

    if(hidden == true)
    {
        setVisible(false);
    }
    else
    {
        setVisible(true);
    }

}

然后我为 KeyListener 创建了事件:

@Override
public void keyPressed(KeyEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("KEY EVENT DETECTED PRESSED");

}

@Override
public void keyReleased(KeyEvent key) {
    System.out.println("KEY EVENT DETECTED ON CHAT BOX");
    if(key.getKeyCode() == KeyEvent.VK_ENTER)
    {
            System.out.println("Showing message input...");
            setVisible(true);
            repaint();
    }

    if(key.getKeyCode() == KeyEvent.VK_ESCAPE)
    {
            System.out.println("Hiding message input...");
            setVisible(false);

            repaint();
    }

}

@Override
public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

现在,我的目标是当用户按下回车键时出现聊天框,然后按下退出键时消失。

当用户按下 enter 时出现聊天框/JTextField,并触发“在聊天框中检测到的关键事件”,但过了这一点,按键侦听器拒绝工作。“在聊天框中检测到的关键事件”打印甚至没有出现。

控件具有焦点(我什至尝试使用 requestFocusInWindow() 专门为其赋予焦点),但关键侦听器拒绝工作,所以我假设这与 TextField '覆盖'它们或为了输入?

如何让 KeyListeners 监听 JTextField 中的某些键?

问候,本。

4

0 回答 0