JTextField 在句点后限制输入
JTextField limiting input after period
我正在编写一个 CashRegister 程序,目前正在开发 CashierView,我在其中添加了一个选项,供收银员输入客户收到的现金数额。我现在对其进行格式化,以便用户只能输入数字和 1 个句点。我现在想将句点后可以输入的数字限制为两个。我正在努力完成这项工作。
我注释掉了一个我试过但没有用的代码,因为它可能会很有趣。
感谢所有帮助!
布,
维克多
private void jCashReceivedKeyTyped(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar(); //Allows input of only Numbers and periods in the textfield
//boolean tail = false;
if ((Character.isDigit(c) || (c == KeyEvent.VK_BACKSPACE) || c == KeyEvent.VK_PERIOD)) {
int period = 0;
if (c == KeyEvent.VK_PERIOD) { //Allows only one period to be added to the textfield
//tail = false;
String s = getTextFieldCash();
int dot = s.indexOf(".");
period = dot;
if (dot != -1) {
evt.consume();
}
}
//. if (tail=true){ //This is the code that I tried to use to limit input after the period to two
// String x = getTextFieldCashTail();
// if (x.length()>1){
// evt.consume();
// }
// }
}
else {
evt.consume();
}
}
如果您执意要使用 KeyEvent
执行此操作,这里有一种可能的方法:
private void jCashReceivedKeyTyped(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar(); //Allows input of only Numbers and periods in the textfield
if ((Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_PERIOD)) {
String s = getTextFieldCash();
int dot = s.indexOf(".");
if(dot != -1 && c == KeyEvent.VK_PERIOD) {
evt.consume();
} else if(dot != -1 && c != KeyEvent.VK_BACK_SPACE){
String afterDecimal = s.substring(dot + 1);
if (afterDecimal.length() > 2) {
evt.consume();
}
}
}
}
希望这对您有所帮助。请记住,通过收听 KeyEvent
,如果有人将值复制并粘贴到您的 JTextField
,这将无法捕捉到。如果你想捕捉任何可能的输入类型,你会想要使用 DocumentListener. If you're wondering how to use a DocumentListener
, here 是一些显示如何在 JTextField
上使用它的代码。
我正在编写一个 CashRegister 程序,目前正在开发 CashierView,我在其中添加了一个选项,供收银员输入客户收到的现金数额。我现在对其进行格式化,以便用户只能输入数字和 1 个句点。我现在想将句点后可以输入的数字限制为两个。我正在努力完成这项工作。
我注释掉了一个我试过但没有用的代码,因为它可能会很有趣。
感谢所有帮助! 布, 维克多
private void jCashReceivedKeyTyped(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar(); //Allows input of only Numbers and periods in the textfield
//boolean tail = false;
if ((Character.isDigit(c) || (c == KeyEvent.VK_BACKSPACE) || c == KeyEvent.VK_PERIOD)) {
int period = 0;
if (c == KeyEvent.VK_PERIOD) { //Allows only one period to be added to the textfield
//tail = false;
String s = getTextFieldCash();
int dot = s.indexOf(".");
period = dot;
if (dot != -1) {
evt.consume();
}
}
//. if (tail=true){ //This is the code that I tried to use to limit input after the period to two
// String x = getTextFieldCashTail();
// if (x.length()>1){
// evt.consume();
// }
// }
}
else {
evt.consume();
}
}
如果您执意要使用 KeyEvent
执行此操作,这里有一种可能的方法:
private void jCashReceivedKeyTyped(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar(); //Allows input of only Numbers and periods in the textfield
if ((Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_PERIOD)) {
String s = getTextFieldCash();
int dot = s.indexOf(".");
if(dot != -1 && c == KeyEvent.VK_PERIOD) {
evt.consume();
} else if(dot != -1 && c != KeyEvent.VK_BACK_SPACE){
String afterDecimal = s.substring(dot + 1);
if (afterDecimal.length() > 2) {
evt.consume();
}
}
}
}
希望这对您有所帮助。请记住,通过收听 KeyEvent
,如果有人将值复制并粘贴到您的 JTextField
,这将无法捕捉到。如果你想捕捉任何可能的输入类型,你会想要使用 DocumentListener. If you're wondering how to use a DocumentListener
, here 是一些显示如何在 JTextField
上使用它的代码。