我创建了一个扩展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键时,会出现chatbox / JTextField,并且会出现“在CHAT BOX BOX中检测到的键事件”,但是在此之后,键盘记录器拒绝工作。 “在CHAT BOX中检测到的关键事件”打印件甚至不适用。
控件有焦点(我甚至尝试过专注于使用requestFocusInWindow()),但是关键的监听器拒绝工作,所以我假设它与TextField“覆盖”它们或其他东西有关输入的缘故?
如何让KeyListeners侦听JTextField中的某些键?
此致 本。