Java JTextField和(错误的)键侦听器
我创建了一个自定义类,它扩展了JTextField并实现了KeyListener。以下是我的课堂摘录:Java JTextField和(错误的)键侦听器,java,swing,events,Java,Swing,Events,我创建了一个自定义类,它扩展了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
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键时聊天框出现,然后当他们按escape键时聊天框消失
当用户按下enter键时,出现chatbox/JTextField,并触发“chatbox中检测到的按键事件”,但超过此点时,按键侦听器拒绝工作。“在聊天框中检测到关键事件”打印内容甚至不适用
该控件具有焦点(我甚至尝试使用requestFocusInWindow()专门为其提供焦点),但关键侦听器拒绝工作,因此我假设这与文本字段“覆盖”它们有关,还是与输入有关
如何让KeyListeners监听JTextField中的某些键
问候,,
Ben.可能值得注意的是,父对象是一个自定义JFrame,我已经将键侦听器添加到父对象中。请使用SwingKeybindings@GuillaumePolet我向父项添加了键绑定,但是我有同样的问题,一旦TextField获得焦点,键绑定就不再工作了。这会很快给你一个体面的答复。不提供密钥侦听器意味着你要求其他人为你这样做,这不太可能发生。只需强调@Guillaume的评论:永远不要使用密钥侦听器-只有当它们注册到的组件是focusowner时,它们才会工作,这通常是它们造成的最小问题。键绑定是一种方式。如果希望聚焦组件的父级处理组件本身未处理的那些组件,请在\u祖先时使用其inputmap类型