数字1的键代码在Java 49中,而数字键盘中数字1的键代码是97。 我有一个JTextArea,我需要防止从数字键盘插入数字。
我尝试过:
使用DocumentFilter,但是在这里我没有按键代码
使用ActionMap,在这里我可以匹配键代码,但不能阻止它添加到JTextArea文本
最后一个选项是使用KeyListener。我想我可以使用KeyListener和一个外部变量,并将所需的数据保存在此变量中,但我希望有更好的方法可以做到这一点。 我知道没有直接的方法可以防止使用KeyListener插入密钥。
以后的编辑:使用ActionMap时,我无法删除最后一个字符,因为在将角色添加到JTextArea之前执行了“ actionPerformed”。我尝试过:
JTextArea jtf1 = new JTextArea();
jtf1.getActionMap().put("handleReplaceable", new AbstractAction() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
System.err.println("Found replaceable original text is "+jtf1.getText());
jtf1.setText(jtf1.getText().substring(0, jtf1.getText().length()-1));
}
});
答案 0 :(得分:0)
您可以将textArea中的String转换为字节数组。之后,使用for循环,您应该知道textArea中是否有数字。代码编号从48(对于数字0)开始,到57(9)(数字9)结束
答案 1 :(得分:0)
您可以在数字键盘键为JTextArea#setEditable(false)
时使用pressed
方法,然后在释放数字键时使用JTextArea#setEditable(true)
。
一个例子:
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class IgnoreNumpad {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea area = new JTextArea();
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0, false), "disable");
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, 0, false), "disable");
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0, true), "enable");
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, 0, true), "enable");
//Add all keys
area.getActionMap().put("disable", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
area.setEditable(false); //When key pressed, set it non-editable
}
});
area.getActionMap().put("enable", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
area.setEditable(true); //Key released, make it editable
}
});
frame.add(area);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}