【发布时间】:2014-04-18 17:02:10
【问题描述】:
我怎样才能阻止用户在使用 java 制作的计算器中添加另一个 dot。
我已经有了我的 JTextfield,我想阻止用户输入 12.56.1 而不是 12.561
【问题讨论】:
标签: java swing user-interface jtextfield calculator
我怎样才能阻止用户在使用 java 制作的计算器中添加另一个 dot。
我已经有了我的 JTextfield,我想阻止用户输入 12.56.1 而不是 12.561
【问题讨论】:
标签: java swing user-interface jtextfield calculator
而不是获取“。”的计数。每一次,这里都有一个有效的方法来做到这一点
textField.addKeyListener(new KeyListener() {
int i=0;
public void keyTyped(KeyEvent e) {
if(e.getKeyChar()=='.'){
if(i==1)
e.consume();
else
i=1;
}
}
public void keyPressed(KeyEvent keyEvent) {}
public void keyReleased(KeyEvent keyEvent) {}
});
【讨论】:
KeyListener,当您使用Document 字段时,这些可能会导致突变异常。也不能保证会引发事件的顺序,这意味着击键可能会在它到达您的侦听器之前被消耗掉,或者击键可能已经应用于字段文档,从而使其冗余。
如果您想对文本组件进行实时验证,最好的选择是使用 `DocumentFilter。
请参阅Text Component Features,尤其是Implementing a Document Filter 了解更多详情和these examples
不要在文本组件上使用KeyListener,当您使用Document 字段时,这些可能会导致突变异常。也不能保证会引发事件的顺序,这意味着击键可能会在到达您的侦听器之前被消耗掉。
【讨论】:
使用标志防止计算器中出现多个点,例如:
public void actionPerformed(ActionEvent e) {
if(e.getSource()==sevenButton) {
if(isCperatorClicked) {
flag=0;
label.setText("7");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"7");
}
}else if(e.getSource()==eightButton){
if(isCperatorClicked) {
flag=0;
label.setText("8");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"8");
}
}else if(e.getSource()==nineButton){
if(isCperatorClicked) {
flag=0;
label.setText("9");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"9");
}
}else if(e.getSource()==fourButton){
if(isCperatorClicked) {
flag=0;
label.setText("4");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"4");
}
}else if(e.getSource()==fiveButton){
if(isCperatorClicked) {
flag=0;
label.setText("5");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"5");
}
}else if(e.getSource()==sixButton) {
if(isCperatorClicked) {
flag=0;
label.setText("6");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"6");
}
}else if(e.getSource()==oneButton) {
if(isCperatorClicked) {
flag=0;
label.setText("1");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"1");
}
}else if(e.getSource()==twoButton) {
if(isCperatorClicked) {
flag=0;
label.setText("2");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"1");
}
}else if(e.getSource()==threeButton) {
if(isCperatorClicked) {
flag=0;
label.setText("3");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"3");
}
}else if(e.getSource()==zeroButton) {
if(isCperatorClicked) {
flag=0;
label.setText("0");
isCperatorClicked=false;
}else {
label.setText(label.getText()+"0");
}
}else if(e.getSource()==dotButton){
if(isCperatorClicked) {
flag=0;
label.setText(".");
isCperatorClicked=false;
}else if(flag==0){
label.setText(label.getText()+".");
flag=1;
}
}else if(e.getSource()==additionButton) {
isCperatorClicked=true;
oldValue=label.getText();
operator=1;
}else if(e.getSource()==multiButton) {
isCperatorClicked=true;
oldValue=label.getText();
operator=2;
}else if(e.getSource()==minusButton) {
isCperatorClicked=true;
oldValue=label.getText();
operator=3;
}else if(e.getSource()==divisionButton){
isCperatorClicked=true;
oldValue=label.getText();
operator=4;
}else if(e.getSource()==clearButton) {
label.setText("");
flag=0;
}else if(e.getSource()==equalButton) {
flag=1;
switch(operator) {
case 1:
newValue=label.getText();
oldValueF=Float.parseFloat(oldValue);
newValueF=Float.parseFloat(newValue);
Result=oldValueF+newValueF;
label.setText(Result+"");
break;
case 2:
newValue=label.getText();
float oldValueF=Float.parseFloat(oldValue);
float newValueF=Float.parseFloat(newValue);
float Result=oldValueF*newValueF;
label.setText(Result+"");
break;
case 3:
newValue=label.getText();
oldValueF=Float.parseFloat(oldValue);
newValueF=Float.parseFloat(newValue);
Result=oldValueF-newValueF;
label.setText(Result+"");
break;
case 4:
newValue=label.getText();
oldValueF=Float.parseFloat(oldValue);
newValueF=Float.parseFloat(newValue);
Result=oldValueF/newValueF;
label.setText(Result+"");
break;
}
}
}
【讨论】: