windows application程序-->
1.设计面板、按键、文本框,基本操作不多说。提一下几个重要的变量:
//opt 为上一个运算符,如果不懂,请看后面;
String opt = “=”;
//用来保存结果的变量,如果你学过大学计算机的话,就相当于寄存器;
double result = 0;
//因为当按数字的时候,要知道是否是一个完整的数字,比如 按1再按2 ,第二次到底是显示2呢还是显示12,如果显示2就代表不是一个完整的数字,如果是12就代表还是一个完整的数字;
boolean isfirt=true;
说明:因为我们计算的是中缀表达式,而计算机是将其转化了计算了的,这里就转化为后缀计算,例如:1+2 的后缀表达式就是:1 2 + ; 所以,opt应定义为上一个运算符;
按键是数字,就直接将其放入。
2.为各个按键添加事件,这里我们把主类实现一个接口 implements ActionListener,方便添加事件,因为直接在design里面加的话,他会自动实现匿名类,new ActionListener ()... 将它替换成 this。
package practice3;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import javax.swing.JPanel;
import java.awt.GridLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
public class Carculator implements ActionListener{
private JFrame frame;
private JTextField view;
private String opt = "=";
private double result=0;
//如果不是一个数字,当按数字键的时候就直接重新设置文本,否则直接加进去。
boolean isfirst = true;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Carculator window = new Carculator();
window.frame.setTitle("Carculator");
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Carculator() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.NORTH);
FlowLayout fl_panel = new FlowLayout(FlowLayout.CENTER, 5, 5);
panel.setLayout(fl_panel);
view = new JTextField();
view.setEditable(false);
view.setText("0");
view.setHorizontalAlignment(JTextField.RIGHT);
panel.add(view);
view.setColumns(35);
JPanel panel_1 = new JPanel();
frame.getContentPane().add(panel_1, BorderLayout.CENTER);
panel_1.setLayout(new GridLayout(4, 4, 3, 3));
JButton button_5 = new JButton("1");
button_5.addActionListener(this);
panel_1.add(button_5);
JButton button_8 = new JButton("2");
button_8.addActionListener(this);
panel_1.add(button_8);
JButton button_7 = new JButton("3");
button_7.addActionListener(this);
panel_1.add(button_7);
JButton button_6 = new JButton("+");
button_6.addActionListener(this);
panel_1.add(button_6);
JButton button_4 = new JButton("4");
button_4.addActionListener(this);
panel_1.add(button_4);
JButton button_3 = new JButton("5");
button_3.addActionListener(this);
panel_1.add(button_3);
JButton button = new JButton("6");
button.addActionListener(this);
panel_1.add(button);
JButton button_1 = new JButton("-");
button_1.addActionListener(this);
panel_1.add(button_1);
JButton button_2 = new JButton("7");
button_2.addActionListener(this);
panel_1.add(button_2);
JButton btnNewButton = new JButton("8");
btnNewButton.addActionListener(this);
panel_1.add(btnNewButton);
JButton button_9 = new JButton("9");
button_9.addActionListener(this);
panel_1.add(button_9);
JButton button_11 = new JButton("*");
button_11.addActionListener(this);
panel_1.add(button_11);
JButton button_10 = new JButton("C");
button_10.addActionListener(this);
panel_1.add(button_10);
JButton button_12 = new JButton("0");
button_12.addActionListener(this);
panel_1.add(button_12);
JButton button_13 = new JButton("=");
button_13.addActionListener(this);
button_13.setBackground(new Color(255, 0, 0));
button_13.setForeground(Color.BLACK);
panel_1.add(button_13);
JButton button_14 = new JButton("/");
button_14.addActionListener(this);
panel_1.add(button_14);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String str = e.getActionCommand();
//是数字
if("0123456789".indexOf(str)>=0){
HandNum(str);
}
else if(str.equals("C")){
HandleC();
}
else {
//运算符
HandCMD(str);
}
}
// Clear 按钮 ,清空
public void HandleC() {
view.setText("0");
isfirst = true;
opt = "=";
}
//处理数字
public void HandNum(String str) {
//如果是第一个数字,直接
if(isfirst) {
view.setText(str);
}
else {
view.setText(view.getText()+str);
}
isfirst = false;
}
//处理运算符
public void HandCMD(String cmd) {
if(opt.equals("=")) {
//将文本框中的数字放入result中
result = GetNumFromView();
}
else if(opt.equals("+")) {
result+=GetNumFromView();
}
else if(opt.equals("-")) {
result-=GetNumFromView();
}
else if(opt.equals("*")) {
result*=GetNumFromView();
}
else if(opt.equals("/")) {
result/=GetNumFromView();
}
long t1 = (long)result;
if((t1 - result)==0) {
view.setText(String.valueOf(t1));
}
else view.setText(String.valueOf(result));
opt = cmd;
isfirst = true;
}
public double GetNumFromView() {
return Double.parseDouble(view.getText());
}
}