我目前正在开发Matrix计算器的开源代码。我想要实现的是让用户只在JTextArea中输入数字。数字包括负数和十进制数。我的问题如下:
Snapshot of the Matrix Calculator showing letters entered into the JTextArea
我尚未对此进行任何编码,因为我不确定如何向我的JTextArea添加动作侦听器。
答案 0 :(得分:-1)
我尝试为您制作解决方案,它只接受0到9之间的数字以及空格字符,点和换行符,您可以根据需要添加和删除其他约束。
jTextArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
}
@Override
public void insertUpdate(DocumentEvent e) {
// use your restriction logic here
// allow only numeric
Document doc = jTextArea.getDocument();
try {
String c = doc.getText(doc.getLength() - 1, 1);
if(c.equals("0") || c.equals("1") || c.equals("2") || c.equals("3") || c.equals("4") || c.equals("5") || c.equals("6") || c.equals("7") || c.equals("8") ||
c.equals("9") || c.equals("0") || c.equals(".") || c.equals("-") || c.equals(" ") || c.equals("\n")) {
} else {
String ss = doc.getText(0, doc.getLength()-1);
Runnable clearText = new Runnable() {
public void run() {
jTextArea.setText(ss);
}
};
SwingUtilities.invokeLater(clearText);
jTextArea.setText(doc.getText(0, doc.getLength()-1));
}
} catch (BadLocationException e2) {
// TODO: handle exception
}
}
@Override
public void changedUpdate(DocumentEvent arg0) {
}
});
它可能不是完美的解决方案,但它可以帮助您完成任务
答案 1 :(得分:-1)
感谢@PramodYadav的帮助。我使用了代码片段,并使用java.awt.event.KeyEvent
提取了以下内容,并使用String c = character.toString(java.awt.event.KeyEvent.getKeyChar());
阅读每个按键。我相信别人会有更好的解决方案。
请参考下面的代码:
JTextArea.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
JTextAreaKeyTyped(evt);
}
});
private void taBKeyTyped(java.awt.event.KeyEvent evt) {
try{
javax.swing.text.Document doc = taA.getDocument();
String c = Character.toString(evt.getKeyChar());
if (c.equals("\b") || c.equals("0") || c.equals("1") || c.equals("2") || c.equals("3") || c.equals("4") || c.equals("5") || c.equals("6") || c.equals("7") || c.equals("8") || c.equals("9") || c.equals("0") || c.equals(".") || c.equals("-") || c.equals(" ") || c.equals("\n")) {
}
else {
javax.swing.JOptionPane.showMessageDialog(null, "Invalid key pressed. Please enter valid numbers, including:\n - Negative Numbers &\n - Decimal numbers");
String ss = doc.getText(0, doc.getLength()-1);
System.out.println(doc.getLength());
//using lambda expression
Runnable clearText;
clearText = () -> {
taA.setText(ss);
};
javax.swing.SwingUtilities.invokeLater(clearText);
JTextArea.setText(doc.getText(0, doc.getLength()-1));
}
}
catch(HeadlessException | BadLocationException e) {
System.out.println("Exception: " + e);
}
}
如果我做得好并且我没有使用糟糕的编码方法,请告诉我。