关于JTextFields和输入

时间:2013-03-24 23:05:12

标签: java swing key keypress jtextfield

我正在研究一个JTexfield,它将自己的文本设置为当焦点在窗口上时按下的键的名称。我设法让它只有一个单词代码:

@Override
public void keyReleased(KeyEvent ev) {
    if (ev.getKeyCode() != 0) {
    keyTrigger = ev.getKeyCode();
    txtTrigger.setText(ev.getKeyText(keyTrigger));
}
}

@Override
public void keyTyped(KeyEvent ev) {
    txtTrigger.setText("");
}

然而,当您按F1--12或Ctrl等特殊键时,它看起来很可怕,因为它保留了最后输入的非特殊键(例如,如果按'T'然后按'Ctrl',则字段中的文本在你释放'Ctrl'键之前一直保持't'。

这是JTextField的代码:

txtTrigger = new JTextField();
txtTrigger.setColumns(10);
txtTrigger.addKeyListener(this);
txtTrigger.setBounds(80, 5, 64, 20);
contentPane.add(txtTrigger);

我想要的是在释放密钥之前该字段为空。如何以这种方式运行应用程序?

2 个答案:

答案 0 :(得分:1)

我不认为可编辑的文本字段是您最好的选择。我过去所做的基本上都是伪造的。

我已经生成了一个“看起来”像JTextField的自定义组件,并且使用我自己的KeyListener,我在视图中添加了元素(我使用了自己的“关键”渲染器,但你可以简单地得到一个可以渲染的String元素列表。

基本上,当触发keyPressed时,我会将密钥代码添加到列表中(考虑到其修饰符状态等内容)。如果使用相同的密钥代码触发了另一个键事件,则可以忽略它。

触发keyReleased时,您可以从活动列表中删除该密钥代码。

答案 1 :(得分:0)

您可以将keylistener添加到jframe或许多组件中...... 只需确保该组件具有焦点。