java -- swt - - 计算器
环境搭建
安装java、eclipse、以及对应的swt插件。
开始工程
建立工程:
在java下建立一个在其他 —- WindowsBuilder —- SWTdesigner —- SWT/JFrame Java Project。建立好以后运行将得到一个swt窗口。设计界面 :
点击代码下的Design选项卡 —- 拖动一个布局到窗口里 —- 然后自定义界面
如果没有发现Design选项卡的话在代码编辑窗口内右击 选择打开方式为: Windows Builder edit码代码 :
获取框里的文本:text.getText();
设置文本:text.setText();
很简单的函数。
Question & BUG
TODO 处理按下 1 后显示 01 的问题
FIXME 按下后变为0.1
FIXME 直接按下 . 的话前面没有变为 0 .
TODO 字符串 转 double
TODO 处理浮点数运算后结果多余显示的“.0”
直接复制代码或把代码放到不同的计算器中运行的话可能hi出现一大片红色的错误,是因为在新的环境中没有把需要的包给导入。
需要在项目上右击 —- 属性 —- 然后一步步把需要的包导入,很多简单,不懂就多试试。
在java中运算浮点数的话会得不到准确的值是因为计算器中是用二进制来存数据的,所以一个小数在计算机中会是无限循环的。
要处理这个BUG的话就需要使用java的BigDecimal类。
怎么把左上角的图标自定义?
——–在Design里点击窗口、在左边的属性框里找到Image。
怎么设置文本框里的文本出现在后边?
——也是在属性框里找到Style 找到 align,设置。
怎么把工作空间导入eclipse?
——–在工作空间那里(如果没有这个窗口的话,在窗口那里找到它,把它显示出来)右击导入 —- General —- 现有项目到工作空间 —- 选择根目录 —- 选项目文件夹的上层文件夹 —- Finish
package com.java; * 计算器import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Text;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.wb.swt.SWTResourceManager;public class Test { protected Shell shell; private Text text; private int op = 0; private double num1; private double num2; private static final int op_ADD =1; private static final int op_SUB =2; private static final int op_MUL =3; private static final int op_DIV =4; /** * Launch the application. * @param args */ public static void main(String[] args) { try { Test window = new Test(); window.open(); } catch (Exception e) { e.printStackTrace(); } } //TODO 把文本设置在文本框的右边:在 text 属性的 style 的 align 里设置。 /** * Open the window. */ public void open() { Display display = Display.getDefault(); createContents(); shell.open(); shell.layout(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } /** * Create contents of the window. */ protected void createContents() { shell = new Shell(); shell.setImage(SWTResourceManager.getImage("E:\\Design\\nexus4full(96 96)\\circle.png")); shell.setSize(240, 297); shell.setText("SWT Application"); shell.setLayout(new GridLayout(4, false)); text = new Text(shell, SWT.BORDER | SWT.RIGHT); GridData gd_text = new GridData(SWT.FILL, SWT.FILL, true, false, 4, 1); gd_text.heightHint = 36; gd_text.widthHint = 424; text.setLayoutData(gd_text); Button button = new Button(shell, SWT.NONE); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "7"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); GridData gd_button = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_button.heightHint = 37; gd_button.widthHint = 51; button.setLayoutData(gd_button); button.setText("7"); Button button_1 = new Button(shell, SWT.NONE); button_1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "8"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); GridData gd_button_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_button_1.heightHint = 37; gd_button_1.widthHint = 51; button_1.setLayoutData(gd_button_1); button_1.setText("8"); Button button_2 = new Button(shell, SWT.NONE); GridData gd_button_2 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_button_2.heightHint = 37; gd_button_2.widthHint = 51; button_2.setLayoutData(gd_button_2); button_2.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "9"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); button_2.setText("9"); Button button_10 = new Button(shell, SWT.NONE); GridData gd_button_10 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_button_10.widthHint = 46; gd_button_10.heightHint = 40; button_10.setLayoutData(gd_button_10); button_10.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { op = op_ADD; num1 =Double.parseDouble (text.getText() ); text.setText("0"); } }); button_10.setText("+"); Button button_3 = new Button(shell, SWT.NONE); button_3.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "4"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); GridData gd_button_3 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_button_3.heightHint = 37; gd_button_3.widthHint = 51; button_3.setLayoutData(gd_button_3); button_3.setText("4"); Button button_4 = new Button(shell, SWT.NONE); button_4.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "5"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); GridData gd_button_4 = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); gd_button_4.heightHint = 33; button_4.setLayoutData(gd_button_4); button_4.setText("5"); Button button_5 = new Button(shell, SWT.NONE); button_5.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "6"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); GridData gd_button_5 = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); gd_button_5.heightHint = 35; button_5.setLayoutData(gd_button_5); button_5.setText("6"); Button button_11 = new Button(shell, SWT.NONE); button_11.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { op = op_SUB ; num1 =Double.parseDouble (text.getText() ); //num1 = Integer.parseInt ( text.getText() ); text.setText("0"); } }); button_11.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); button_11.setText("-"); Button button_6 = new Button(shell, SWT.NONE); button_6.setFont(SWTResourceManager.getFont("微软雅黑", 11, SWT.NORMAL)); button_6.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { //TODO 处理按下 1 后显示 01 的问题 text.setText (text.getText() + "1"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring (1, text.getText().length( ) ) ) ; } //FIXME 按下后变为0.1// else if(text.getText().startsWith("0.")){// text.setText ( text.getText() +"1") ;// } } }); GridData gd_button_6 = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); gd_button_6.heightHint = 37; gd_button_6.widthHint = 51; button_6.setLayoutData(gd_button_6); button_6.setText("1"); Button button_7 = new Button(shell, SWT.NONE); button_7.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "2"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); button_7.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); button_7.setText("2"); Button button_8 = new Button(shell, SWT.NONE); button_8.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "3"); if (text.getText().startsWith("0")){ text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ; } } }); button_8.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); button_8.setText("3"); Button button_12 = new Button(shell, SWT.NONE); button_12.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { op = op_MUL; num1 =Double.parseDouble (text.getText() ); //num1 = Integer.parseInt ( text.getText() ); text.setText("0"); } }); button_12.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); button_12.setText("\u00D7"); Button btnC = new Button(shell, SWT.NONE); btnC.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText("0"); } }); btnC.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); btnC.setText("C"); Button button_9 = new Button(shell, SWT.NONE); button_9.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText(text.getText() + "0");// if (text.getText().startsWith("0")){// text.setText ( text.getText().substring ( 1, text.getText().length( ) ) ) ;// } } }); GridData gd_button_9 = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); gd_button_9.heightHint = 37; gd_button_9.widthHint = 51; button_9.setLayoutData(gd_button_9); button_9.setText("0"); Button button_14 = new Button(shell, SWT.NONE); button_14.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { text.setText (text.getText() + "."); //FIXME 直接按下 . 的话前面没有变为 0 . } }); button_14.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); button_14.setText("."); Button button_13 = new Button(shell, SWT.NONE); button_13.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { op = op_DIV; num1 =Double.parseDouble (text.getText() ); //num1 = Integer.parseInt( text.getText() ); text.setText("0"); } }); button_13.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); button_13.setText("\u00F7"); Button button_15 = new Button(shell, SWT.NONE); button_15.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { double result ; //TODO 字符串 转 double num2 =Double.parseDouble ( text.getText() ); switch ( op) { case op_ADD: result = num1+num2; text.setText( result +""); //FIXME java中计算浮点数的时候不精确,如:0.3 * 3 //需要使用 java 的大数类 BigDecimal。 //TODO 处理浮点数运算后结果多余显示的“.0” if (text.getText().endsWith("0")) text.setText(text.getText().substring(0,text.getText().length()-2)); break; case op_SUB: result = num1 - num2; text.setText( result +""); if (text.getText().endsWith("0")) text.setText(text.getText().substring(0,text.getText().length()-2)); break; case op_MUL: result = num1 * num2; text.setText( result +""); if (text.getText().endsWith("0")) text.setText(text.getText().substring(0,text.getText().length()-2)); break; case op_DIV: result = num1 / num2; text.setText( result +""); if (text.getText().endsWith("0")) text.setText(text.getText().substring(0,text.getText().length()-2)); break; default: break; } } }); GridData gd_button_15 = new GridData(SWT.FILL, SWT.FILL, false, false, 4, 1); gd_button_15.heightHint = 34; button_15.setLayoutData(gd_button_15); button_15.setText("="); }}
接下来要做的就是把它给打包,让他脱离eclipse运行了,现在还什么都不懂,加油!!