先贴代码:
Text showText = new Text(showArea, SWT.NONE | SWT.RIGHT_TO_LEFT
| SWT.WRAP);
showText.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
// TODO Auto-generated method stub
boolean b = "0123456789.+-*%^√".indexOf(e.character) >= 0;
e.doit = b; // doit属性如果为true,则字符允许输入,反之不允许
return;
}
});
用了这个之后就只有 0123456789.+-*%^√可输入了
可我还想要Backspace的退格功能,我该怎么做?
先说一下这个代码的用途吧,我是想要做一个计算器
那么还有一个问题就是小数点** .**只能出现一次
我设了一个静态布尔量来检测当前是否有小数点 .
public static boolean spot = false;
再看代码:
public static String Back(String s) {
// back 消除一个字符
if (s.length() > 0) {
if (s.indexOf(".") == 0)
Start.spot = false;
return s.substring(0, s.length() - 1);
} else {
Start.spot = true;
return "0";
}
}
这是在另一个类中定义的一个方法来实现界面上退格按钮的功能,之前我在
showText.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
// TODO Auto-generated method stub
boolean b = "0123456789.+-*%^√".indexOf(e.character) >= 0;
e.doit = b; // doit属性如果为true,则字符允许输入,反之不允许
return;
}
});
中也加入了对小数点的检测来决定e.doit的值,可是事实上会出现**0.2.23.**这种情况,但是不会连着几个点一起输入进去
还有一个问题,Back函数在文本框字符大于三个后便不起作用了,不知为何
贴上Back按钮的代码
keyButtons[15].addSelectionListener(new SelectionAdapter() {
// "Back"
//Calculator 是我定义的一个类,专门用来盛放计算器面板上各个按钮的功能
public void widgetSelected(SelectionEvent e) {
if (showText.getCharCount() > 0)
showText.setText(Calculator.Back(showText.getText()));
showText.setSelection(showText.getCharCount());
shell.setFocus();
}
});
所以目前有三个关于这个Text的问题
1. 怎样才能使键盘上的Back键起作用
2.怎样控制小数点只能出现一次
3.Back函数是怎么了...(因为文本框里有两个字符时它还是可用的)
求解答
"0123456789.+-*%^√" 加入"\b"试试
建议用正则表达式的方法代替你现在的方案
具体现状是:例如我输入123.321,此时我可以用键盘的backspace或者面板上的back来删除他们,但是,删除了 小数点之后就无法再次输入了,而我已经设了一个静态布尔量来表示小数点的存在与否了,并且在back的函数里进行了设置
你看一下代码:
public static String Back(String s) {
// back 消除一个字符
String t = null;
if (s.length() >= 0) {
if (s.substring(0, s.length() - 1).length() == 0) {
t = "0";
} else {
t = s.substring(0, s.length() - 1);
}
if (s.substring(s.length() - 1, s.length()).equals(".")) {
Start.spot = false;
}
}
return t;
}
showText.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.keyCode == SWT.BS
|| "123456789+-*%^√".indexOf(e.character) >= 0) {
if (showText.getText().equals("0"))
showText.setText("");
e.doit = true; // doit属性如果为true,则字符允许输入,反之不允许
} else if (e.keyCode == SWT.CR) {
Calculator.Equal(temp, result, lastOperator);
} else if (e.character == '.' && spot == false) {
spot = true;
e.doit = true;
} else if (e.character == '0') {
if (showText.getText().equals("0"))
e.doit = false;
else
e.doit = true;
} else {
e.doit = false;
}
return;
}
});