【发布时间】:2012-08-07 17:39:20
【问题描述】:
我想将十进制逗号(德语键盘)重新映射到某个 JTextFields 的某个点。我已经尝试过getInputMap() 和getActionMap,但到目前为止没有任何效果。到目前为止,我得到的最好结果是逗号根本不起作用。
我认为应该有一些使用输入映射的方法,但是如何呢?
下面是一个小示例程序,有人可以提示我在评论位置填写什么吗?还是这完全错了?
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class KeyTest extends JFrame {
private JTextField textField;
public KeyTest() {
textField = new JTextField();
add(textField);
InputMap map = textField.getInputMap();
map.put(KeyStroke.getKeyStroke(','), /* what to do here? */);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
KeyTest test = new KeyTest();
test.pack();
test.setVisible(true);
}
});
}
}
编辑:
也许我的问题不够清楚。正常的数字没有问题。我只是想让用户在输入日期时输入更方便。在德国,这些格式为"DD.MM.YYYY"。这意味着,您不能仅使用数字键盘输入日期,因为我们没有小数点,而是逗号。这就是为什么我想在用于输入日期的文本字段中用点替换逗号。
纯文本和数字的所有输入字段都可以正常工作,甚至日期输入也可以正常工作。我只是想让打字更容易。就在昨天,我注意到 Libreoffice 中的一个类似功能,其中数字小键盘上的逗号(我有一个德语键盘)在数字单元格(我的语言环境设置为英语)中自动替换,但仅在包含数值的单元格中。这也会在您键入时发生。
【问题讨论】:
-
为什么?如果出于格式化/解析原因,下面的答案是正确的,因为其他人可能会有所不同(尽管我现在想不出其他人:-)
-
我不明白。我确实住在德国,我也是德国人。但我从未尝试输入像 01,01,2012 这样的日期。但正如我已经发布的那样,答案仍然是 NumberFormat。如果您无法从一种格式解析数字(例如,默认语言环境,比如说 de),请尝试从 en 解析。但是,如果要始终显示“.”,则必须做出决定。作为用户的逗号或逗号的语言环境表示(例如“,”在德国)。
-
这不是关于解析,而是关于将数字键盘上的逗号重新映射为指向。也许您从来不需要快速填写包含大量数字和日期字段的表单。如果您可以仅使用数字键盘输入所有值,则速度会更快。
标签: java swing events keyboard jtextfield