Java编写一个SWT用户界面,实现一个科学计算器,写粗完整代码
时间: 2024-03-06 22:50:09 浏览: 19
很高兴接受您的挑战!以下是一个简单的Java程序,使用SWT库创建了一个基本的科学计算器UI。请注意,此代码可能不够完整或优化,仅供参考。
```
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import java.math.*;
public class Calculator {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("科学计算器");
shell.setLayout(new GridLayout(4, false));
//创建UI控件
Text input = new Text(shell, SWT.BORDER | SWT.RIGHT);
input.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 4, 1));
Label output = new Label(shell, SWT.NONE);
output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 4, 1));
Button btn1 = new Button(shell, SWT.PUSH);
btn1.setText("1");
btn1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn2 = new Button(shell, SWT.PUSH);
btn2.setText("2");
btn2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn3 = new Button(shell, SWT.PUSH);
btn3.setText("3");
btn3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btnAdd = new Button(shell, SWT.PUSH);
btnAdd.setText("+");
btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn4 = new Button(shell, SWT.PUSH);
btn4.setText("4");
btn4.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn5 = new Button(shell, SWT.PUSH);
btn5.setText("5");
btn5.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn6 = new Button(shell, SWT.PUSH);
btn6.setText("6");
btn6.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btnSub = new Button(shell, SWT.PUSH);
btnSub.setText("-");
btnSub.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn7 = new Button(shell, SWT.PUSH);
btn7.setText("7");
btn7.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn8 = new Button(shell, SWT.PUSH);
btn8.setText("8");
btn8.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn9 = new Button(shell, SWT.PUSH);
btn9.setText("9");
btn9.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btnMul = new Button(shell, SWT.PUSH);
btnMul.setText("*");
btnMul.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btnClear = new Button(shell, SWT.PUSH);
btnClear.setText("C");
btnClear.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btn0 = new Button(shell, SWT.PUSH);
btn0.setText("0");
btn0.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btnEqual = new Button(shell, SWT.PUSH);
btnEqual.setText("=");
btnEqual.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Button btnDiv = new Button(shell, SWT.PUSH);
btnDiv.setText("/");
btnDiv.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
//添加按钮选择监听器
btn1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("1");
}
});
btn2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("2");
}
});
btn3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("3");
}
});
btn4.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("4");
}
});
btn5.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("5");
}
});
btn6.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("6");
}
});
btn7.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("7");
}
});
btn8.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("8");
}
});
btn9.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("9");
}
});
btn0.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("0");
}
});
btnClear.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.setText("");
output.setText("");
}
});
btnAdd.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("+");
}
});
btnSub.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("-");
}
});
btnMul.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("*");
}
});
btnDiv.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
input.append("/");
}
});
btnEqual.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
String equation = input.getText();
try {
double result = evaluate(equation);
output.setText(Double.toString(result));
} catch (Exception e) {
output.setText("错误的方程式");
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
//计算方程式
private static double evaluate(String equation) throws Exception {
String[] parts = equation.split("(?=[-+*/])|(?<=[-+*/])");
double result = Double.parseDouble(parts[0]);
for (int i = 1; i < parts.length; i += 2) {
String operator = parts[i];
double operand = Double.parseDouble(parts[i + 1]);
switch (operator) {
case "+":
result += operand;
break;
case "-":
result -= operand;
break;
case "*":
result *= operand;
break;
case "/":
if (operand == 0) {
throw new Exception("除数不能为0");
}
result /= operand;
break;
default:
throw new Exception("无效的运算符:" + operator);
}
}
return result;
}
}
```
本程序中,我们创建了一个基本的科学计算器UI,包括一个文本框和一系列按钮。我们将按钮添加到网格布局中,并为每个按钮添加了选择监听器,以便在用户单击按钮时向文本框添加相应的数字或运算符。我们还为“=”按钮添加了一个选择监听器,该监听器解析文本框中的方程式并计算结果,然后将结果显示在标签中。
此程序还包括一个名为“evaluate”的私有静态方法,该方法接受一个字符串表示的方程式并返回计算结果。我们使用Java的内置“split”方法将方程式拆分为数字和运算符,然后使用一个循环来遍历方程式的各个部分并执行适当的计算。在进行除法计算时,我们还添加了一个检查,以确保除数不为零。
请注意,此代码可能不够完整或优化,仅供参考。