我创建了一个自定义类,它扩展了 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 中的某些键?
问候,本。