如何在Java中替换压缩的char

时间:2014-06-27 14:07:09

标签: java swing

当用户按下" dot"键盘在JTextField中的键盘上我想用逗号透明地替换它。我试过这样的事情:

jTextField.addKeyListener(new KeyAdapter() {
   @Override
   public void keyTyped(KeyEvent event) {
       if (event.getKeyCode() == KeyEvent.VK_DECIMAL) {
         event.setKeyChar(',');
       }
     }
});

但它没有用。

4 个答案:

答案 0 :(得分:0)

您应尝试通过JTextField之类的调用直接操作相关yourTextField.setText(",");实例的文本,而不是尝试将新密钥与已发生的密钥事件相关联(我认为这是不可能的)。在上面的代码段的if语句中。

答案 1 :(得分:0)

替换TextField中输入的理智方法是在TextField的文档(http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter)上使用DocumentFilder。

答案 2 :(得分:0)

谢谢大家的回答。 确实,更好的选择是编写文档过滤器,但是只有在小键盘上按下时才需要替换点字符,而不是当它来自常规键盘时。

我知道我可以在keylistener中设置一个标志,而不是在documentfilter中读取它,但听起来有点过于复杂。

非常感谢。

Franco

答案 3 :(得分:0)

这是我的解决方案:

public class MyTextField extends JTextField {
private boolean substituteDot;

public MyTextField() {
  super();
  addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent event) {
      substituteDot = (event.getKeyCode() == KeyEvent.VK_DECIMAL);
    }
    @Override
    public void keyTyped(KeyEvent event) {
       if (substituteDot) {
         event.setKeyChar(',');
       }
     }
  });
 }
}

谢谢大家!

再见

佛朗哥