package org;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CalFrame extends JFrame {
private JTextField textField = null;
private String[] mOp={"MC","MR","MS","M+"};
private String[] rOp={"Back","CE","C"};
private String[] nOp={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
private JButton button = null;
private CalService service = new CalService();
private ActionListener actionListener = null;
private final int PRE_WIDTH = 360;
private final int PRE_HEIGHT = 250;
/*
* 默认构造器
*/
public CalFrame(){
super();
initialize();
}
private void initialize() {
// TODO Auto-generated method stub
this.setTitle("计算器");
this.setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10, 1));
panel.add(getTextField(),BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(PRE_HEIGHT,PRE_WIDTH));
JButton[] mButton = getMButton();
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(5,1,0,5));
for(JButton b:mButton){
panel1.add(b);
}
JButton[] rButton = getRButton();
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout(1,5));
JPanel panel21 = new JPanel();
panel21.setLayout(new GridLayout(1, 3, 3, 3));
for(JButton b:rButton){
panel21.add(b);
}
JButton[] nButton = getNButton();
JPanel panel22 = new JPanel();
panel22.setLayout(new GridLayout(4,5,3,5));
for(JButton b : nButton){
panel22.add(b);
}
panel2.add(panel21,BorderLayout.NORTH);
panel2.add(panel22, BorderLayout.CENTER);
panel.add(panel1,BorderLayout.WEST);
panel.add(panel2,BorderLayout.EAST);
this.add(panel);
}
private JButton[] getNButton() {
// TODO Auto-generated method stub
String[] redButton = {"/","*","-","+","="};
JButton[] result = new JButton[nOp.length];
for(int i=0;i<this.nOp.length;i++){
JButton b = new JButton(this.nOp[i]);
b.addActionListener(getActionListioner());
Arrays.sort(redButton);
if(Arrays.binarySearch(redButton, nOp[i])>=0){
b.setForeground(Color.red);
}else{
b.setForeground(Color.blue);
}
result[i]=b;
}
return result;
}
private JButton[] getRButton() {
// TODO Auto-generated method stub
JButton[] result = new JButton[rOp.length];
for(int i=1;i<this.rOp.length;i++){
JButton b = new JButton(this.rOp[i]);
b.addActionListener(getActionListioner());
b.setForeground(Color.red);
result[i]=b;
}
return result;
}
private JButton[] getMButton() {
// TODO Auto-generated method stub
JButton[] result = new JButton[mOp.length+1];
result[0] = getButton();
for(int i=0;i<this.mOp.length;i++){
JButton b = new JButton(this.mOp[i]);
b.addActionListener(getActionListioner());
b.setForeground(Color.red);
result[i+1]=b;
}
return result;
}
private JButton getButton() {
// TODO Auto-generated method stub
if(button == null){
button = new JButton();
}
return button;
}
private Component getTextField() {
// TODO Auto-generated method stub
if(textField== null){
textField = new JTextField("0");
textField.setEditable(false);
textField.setBackground(Color.GRAY);
}
return textField;
}
public ActionListener getActionListioner(){
if(actionListener==null){
actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String cmd = e.getActionCommand();
String result = null;
try{
result = service.callMethod(cmd, textField.getText());
}
catch(Exception e1){
System.out.println(e1.getMessage());
}
if(cmd.indexOf("MC")==0){
button.setText("");
}else if(cmd.indexOf("M")==0&&service.getStore()>0){
button.setText("M");
}
if(result != null){
textField.setText(result);
}
}
};
}
return actionListener;
}
}