1.编写一个图形用户界面程序,实现对两个数的加、减、乘、除功能。至少应该包含3个JTextField、1个JButton、1个JLable。3个JTextField分别用于输入两个数字和运算符号,当点击JButton的时候,结果用JLable显示出来。
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class counter {
JFrame jf;
JTextField jt1,jt2,jt3;
JLabel jl1,jl2,jl3,jl4;
JButton button;
public counter() {
jf=new JFrame("赵世伟的简单计算器");
jt1=new JTextField(10);
jt2=new JTextField(1);
jt3=new JTextField(10);
jl1=new JLabel("请输入第1个操作数:");
jl2=new JLabel("请输入运算符(+,-,*,/):");
jl3=new JLabel("请输入第2个操作数:");
jl4=new JLabel();
JButton button=new JButton("=");
Container contentPane=jf.getContentPane();
contentPane.setLayout(new GridLayout(4,2));//设置布局,四行两列
contentPane.add(jl1);
contentPane.add(jt1);
contentPane.add(jl2);
contentPane.add(jt2);
contentPane.add(jl3);
contentPane.add(jt3);
contentPane.add(button);
contentPane.add(jl4);
jf.setSize(400,300);
jf.setVisible(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double temp1,temp3,temp = 0;
String temp2;
temp1=Double.parseDouble(jt1.getText());
temp2=jt2.getText();
temp3=Double.parseDouble(jt3.getText());
if(temp2.equals("+"))
temp=temp1+temp3;
else if(temp2.equals("-"))
temp=temp1-temp3;
else if(temp2.equals("*"))
temp=temp1*temp3;
else if(temp2==("/"))
temp=temp1/temp3;
jl4.setText(""+temp);
}
});
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@SuppressWarnings("unused")
public static void main(String[] args) {
counter c=new counter();
}
}
老师答案:
//Calculator
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Calculator {
JFrame frame = new JFrame("简单计算器");
JTextField tf1 = new JTextField(10);//第一个操作数
JTextField tf2 = new JTextField(10);//运算符
JTextField tf3 = new JTextField(10);//第二个操作数
JLabel label1 = new JLabel("请输入第1个操作数:");
JLabel label2 = new JLabel("请输入运算符(+,-,*,/):");
JLabel label3 = new JLabel("请输入第2个操作数:");
JLabel label4 = new JLabel(); // 运算结果
JButton button = new JButton("计 算");
public Calculator() {
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(4, 2));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
double op1 = Double.parseDouble( tf1.getText());
double op3 = Double.parseDouble( tf3.getText());
String op2 = tf2.getText();
double value=0;
if(op2.equals("+")){
value=op1 + op3;
}
else if(op2.equals("-")){
value=op1 - op3;
}
else if(op2.equals("*")){
value=op1 * op3;
}
else if(op2.equals("/")){
value=op1 / op3;
}
else{
label4.setText("请输入运算符(+,-,*,/)");
tf2.requestFocus();
return;
}
label4.setText("" + value);
}
});
contentPane.add(label1);
contentPane.add(tf1);
contentPane.add(label2);
contentPane.add(tf2);
contentPane.add(label3);
contentPane.add(tf3);
contentPane.add(button);
contentPane.add(label4);
frame.setSize(300, 260);
frame.setVisible(true);// 显示
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Calculator c=new Calculator();
}
}
import java.util.Stack;
//Calculator
class Calculator1 {
// 计算中缀表达式
static Stack<Character> op = new Stack<Character>();
public static Float getv(char op, Float f1, Float f2) {
if (op == '+')
return f2 + f1;
else if (op == '-')
return f2 - f1;
else if (op == '*')
return f2 * f1;
else if (op == '/')
return f2 / f1;
else
return Float.valueOf(-0);
}
public static String calrp(String rp) {
Stack<Float> v = new Stack<Float>();
char[] arr = rp.toCharArray();
int len = arr.length;
for (int i = 0; i < len; i++) {
Character ch = arr[i];
if (ch >= '0' && ch <= '9')
v.push(Float.valueOf(ch - '0'));
else
v.push(getv(ch, v.pop(), v.pop()));
}
return v.pop().toString();
}
public static String getrp(String s) {
char[] arr = s.toCharArray();
int len = arr.length;
String out = "";
for (int i = 0; i < len; i++) {
char ch = arr[i];
if (ch == ' ')
continue;
if (ch >= '0' && ch <= '9') {
out += ch;
continue;
}
if (ch == '(')
op.push(ch);
if (ch == '+' || ch == '-') {
while (!op.empty() && (op.peek() != '('))
out += op.pop();
op.push(ch);
continue;
}
if (ch == '*' || ch == '/') {
while (!op.empty() && (op.peek() == '*' || op.peek() == '/'))
out += op.pop();
op.push(ch);
continue;
}
if (ch == ')') {
while (!op.empty() && op.peek() != '(')
out += op.pop();
op.pop();
continue;
}
}
while (!op.empty())
out += op.pop();
return out;
}
}
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.jws.HandlerChain;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.util.Stack;
//CalculatorMain
public class CalculatorMain extends JFrame implements ActionListener {
private String expression;// 记录表达式
// 各个按键的字符
private final String[] keys = { "(", ")", "C", "Backspace", "7", "8", "9",
"+", "4", "5", "6", "-", "1", "2", "3", "*", ".", "0", "=", "/" };
private JTextField result = new JTextField("0");
// 按键
private JButton[] button = new JButton[20];
CalculatorMain() {
this.setTitle("完整计算器");;
// 计算器布局
JPanel calckeysPanel = new JPanel();
// 布局先分为六行,第一行为文本显示,二到五行为按键
calckeysPanel.setLayout(new GridLayout(6, 1));
calckeysPanel.add(result);
result.setFont(result.getFont().deriveFont((float) (30)));
Container[] containers = new Container[5];
for (int i = 0; i < 5; ++i) {
containers[i] = new Container();
containers[i].setLayout(new GridLayout(1, 4));
calckeysPanel.add(containers[i]);
}
// 按钮
for (int i = 0; i < button.length; ++i) {
button[i] = new JButton(keys[i]);
button[i].setFont(button[i].getFont().deriveFont((float) (30)));
containers[i / 4].add(button[i]);
button[i].addActionListener(this);
if (i == 2 || i == 3)
button[i].setForeground(Color.red);
}
getContentPane().add(calckeysPanel);
// 表达式赋值为空
expression = "";
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String action = e.getActionCommand();
if (action.equals(keys[2])) {
// 用户按下C
handleC();
} else if (action.equals(keys[3])) {
// 用户按下退格
handleBackspace();
} else if (action.equals(keys[18])) {
// 用户按下=
handleCalc();
} else {
// 用户输入表达式
handleExpression(action);
}
}
// 处理按下C的事件
private void handleC() {
expression = "";
result.setText("");
}
// 处理按下退格的事件
private void handleBackspace() {
expression = expression.substring(0, expression.length() - 1);
result.setText(expression);
}
// 处理按下等号的事件
private void handleCalc() {
result.setText(Calculator1.calrp(Calculator1.getrp(expression)));
expression = "";
}
// 处理用户按下数字或运算符的事件
private void handleExpression(String action) {
expression += action;
result.setText(expression);
}
public static void main(String[] args) {
CalculatorMain calculator = new CalculatorMain();
calculator.setSize(800, 600);
calculator.setVisible(true);
}
}