java 计算器SWT/RAP(版本3)键盘鼠标兼容,之前版本也对,但存在线程失效问题,当多人访问时,就容易线程失效,一直犯得一个错误就是一直用static变量和static方法,
之前加了什么js界面控制什么的,都没用,去掉static就好了
package cn.lesaas.nof.rwtswt.ui.dialog;
import java.math.BigDecimal;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import cn.lesaas.nof.conn.base.MyAsyncCallback;
import cn.lesaas.nof.rsclient.UC;
import cn.lesaas.nof.rwtswt.ui.widgets.rules.FieldVerify;
/*
*计算器类,没有继承模态窗口
*/
public class CalcDialog extends Dialog {
private static final long serialVersionUID = 1L;
/** 计算器上的键的显示名字 */
private String[] keys = { "←左键删除", "C", "+", "-", "*", "%除号", "7", "8", "9", "4", "5", "6", "1", "2",
"3", "0", ".", "=默认焦点" };
/** 计算器上的功能键的显示名字 */
/** 计算结果文本框 */
private Text labtopNum;// 上面存放的是数字和符号
private Text labdownresult;// 每次输入的的数字及两个数的和
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private boolean firstDigit = true;
// 计算的中间结果。
private double resultNum = 0.0;
// 当前运算的运算符
private String operator = "=";
// 操作是否合法
private boolean operateValidFlag = true;
private Button buttonKey = null;
boolean closed;
Shell shell;
private MyAsyncCallback cbOpen;
public CalcDialog(Shell parent) {
super(parent, SWT.TITLE);
}
// 创建窗口大小
protected void createShell() {
shell = new Shell(getParent(), getStyle());
shell.setLayout(new FormLayout());
onCreateShell();
}
protected void onCreateShell() {
shell.setText("计算器");
shell.setSize(327, 370);
// shell.setSize(width, height);
Composite composite = new Composite(shell, SWT.NONE);
try {
onCreateMainPanel(composite);
onCreateButtons(composite);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void onCreateMainPanel(Composite parent) throws Exception {
Calc(parent);
}
/**
* 初始化计算器
*/
public void Calc(Composite parent) {
parent.setLayout(new GridLayout());
labtopNum = new Text(parent, SWT.RIGHT | SWT.READ_ONLY | SWT.BORDER);//
GridData gridDataLab = new GridData(GridData.FILL_HORIZONTAL);// GridData是指定子控件的信息
gridDataLab.heightHint = 25;// 初始高度为20
gridDataLab.horizontalSpan = 3;// 跨三列
//gridDataLab.widthHint = 300;
labtopNum.setLayoutData(gridDataLab);
labtopNum.setText("");// 只用来存放每次输入的数字和符号
labtopNum.setFont(UC.getLoginFont());
// 创建数字显示框
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);// GridData是指定子控件的信息
// resultText = new Text(parent, SWT.RIGHT | SWT.BORDER|SWT.READ_ONLY);
labdownresult = new Text(parent, SWT.RIGHT | SWT.READ_ONLY | SWT.BORDER);// |
// SWT.BORDER
gridData.heightHint = 25;// 初始高度为20
gridData.horizontalSpan = 3;// 跨三列
labdownresult.setLayoutData(gridData);
labdownresult.setText("");// 存放这个是对数的结果
labdownresult.setFont(UC.getLoginFont());
// labdownresult.setFocus();
Composite composite = new Composite(parent, SWT.NONE);
GridLayout gridLayoutKey = new GridLayout(3, true);
gridLayoutKey.marginWidth = 0;// 设置按钮距离父控件的左边距为0
gridLayoutKey.marginHeight = 0;// 设置按钮距离父控件的右边距为0</