如何在Java中替换按下的字符
当用户在JTextField中按下键盘上的“dot”键时,我希望透明地用逗号替换它。我试过这样的方法:如何在Java中替换按下的字符,java,swing,Java,Swing,当用户在JTextField中按下键盘上的“dot”键时,我希望透明地用逗号替换它。我试过这样的方法: jTextField.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent event) { if (event.getKeyCode() == KeyEvent.VK_DECIMAL) { event.setKeyChar(','); }
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_DECIMAL) {
event.setKeyChar(',');
}
}
});
但是它不起作用。与其尝试将新密钥与已经发生的密钥事件相关联(我认为这是不可能的),不如尝试通过调用像
yourTextField.setText(“,”)这样的函数直接操作相关JTextField
实例的文本代码>在上面代码片段的if语句中。替换文本字段中输入的明智方法是在文本字段的文档()上使用DocumentFilder。谢谢大家的回答。
不错,更好的选择是编写文档过滤器,但我只需要在numpad上按下点字符,而不是在常规键盘上按下点字符时,才需要替换点字符
我知道我可以在keylistener中设置一个标志,然后在documentfilter中读取它,但这听起来有点太复杂了
多谢各位
Franco以下是我的解决方案:
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(',');
}
}
});
}
}
谢谢大家!
再见
Franco不,在Swing中,你不应该使用如此低级的方法:-)而是使用DocumentFilter。在Swing中不要使用低级侦听器,而是使用DocumentFilter或JFormattedTextField。正如前面所述,DocumentFilter
是解决这种情况的方法。希望这对主题有所帮助:-)应该使用DocumentFilter
。这就是为什么将DocumentFilter
API添加到API中的原因。过滤器的作用是在文本添加到文档之前过滤文本。文档调用了过滤器,因此无需通过重写文档来重新发明轮子(由于这个原因,这个答案确实值得否决)。此外,您创建的筛选器可能会在文本字段或文本窗格中重复使用,即使其中一个使用纯文档,另一个使用StyledDocument。@camickr不知道筛选器存在。更新了答案。不知道过滤器存在。
kleopatra在发布答案之前对此主题发表了两条评论。请在发布前阅读所有答案/评论。