实验9图形用户界面

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

}



}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值