Java中 关于SWT中Text文本框的输入问题

先贴代码:

    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;
            }
        });