package lessoin17_1;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EmptyStackException;
import java.util.Stack;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
public class IntexPanel extends JPanel implements ActionListener{
public static String result = "";
private JButton btn[] = new JButton[20];
public final static Color colorlightblue=new Color(240,240,230);
Color c = Color.white;
public IntexPanel(){
this.setLayout(new GridLayout(4,5));
String s[] = new String[]{"7","8","9","/","sqrt","4","5","6","*","%",
"1","2","3","-","1/x","0","+/-",".","+","="};
for(int i=0;i<s.length;i++){
btn[i] = new JButton(s[i]);
}
for(int i=0;i<s.length;i++){
btn[i].setBorder(BorderFactory.createMatteBorder(6, 6, 6, 6, colorlightblue));
}
Color cc = new Color(160,50,50);
for(int i = 0; i<=2;i++){
btn[i].setForeground(Color.BLUE);
}
for(int i =4;i<=7;i++){
btn[i].setForeground(Color.BLUE);
}
for(int i = 9;i<=12;i++){
btn[i].setForeground(Color.BLUE);
}
for(int i = 14;i<=17;i++){
btn[i].setForeground(Color.BLUE);
}
btn[3].setForeground(cc);
btn[8].setForeground(cc);
btn[13].setForeground(cc);
btn[18].setForeground(cc);
btn[19].setForeground(cc);
for(int i=0;i<btn.length;i++){
btn[i].addActionListener(this);
}
for(int i=0;i<btn.length;i++){
this.add(btn[i]);
}
}
public void actionPerformed(ActionEvent e) {
boolean onePush = true;
if(e.getSource() == btn[0]){
result+="7";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[1]){
result+="8";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[2]){
result+="9";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[5]){
result+="4";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[6]){
result+="5";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[7]){
result+="6";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[10]){
result+="1";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[11]){
result+="2";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[12]){
result+="3";
Calculator.txtFld.setText(result);
}
else if(e.getSource() == btn[17]){
result+=".";
Calculator.txtFld.setText(result);
}
if(e.getSource() == btn[18]) {
result+="+";
Calculator.txtFld.setText(result);
}else if(e.getSource() == btn[13]) {
result+="-";
Calculator.txtFld.setText(result);
}else if(e.getSource() == btn[8]) {
result+="*";
Calculator.txtFld.setText(result);
}else if(e.getSource() == btn[3]) {
result+="/";
Calculator.txtFld.setText(result);
}else if(e.getSource() == btn[19]) {
Calculator.txtFld.setText(String.valueOf(CountRes(result)));
}
}
public double CountRes(String str)
{
int i = 0, j = 0, k;
char c;
StringBuffer s = new StringBuffer();
s.append(str);
s.append('=');
String formula = s.toString();
char[] anArray;
anArray = new char[50];
Stack<Character> mystack = new Stack<Character>();
while (formula.charAt(i) != '=') {
c = formula.charAt(i);
switch (c) {
case '+':
case '-':
while (!mystack.empty()) {
anArray[j++] = mystack.pop().charValue();
}
mystack.push(new Character(c));
i++;
break;
case '*':
case '/':
while (!mystack.empty()
&& (mystack.peek().charValue() == '*' || mystack.peek()
.charValue() == '/')) {
anArray[j++] = mystack.pop().charValue();
}
mystack.push(new Character(c));
i++;
break;
case ' ':
i++;
break;
default:
while ((c >= '0' && c <= '9') || c == '.') {
anArray[j++] = c;
i++;
c = formula.charAt(i);
}
anArray[j++] = '#';
break;
}
}
while (!(mystack.empty()))
anArray[j++] = mystack.pop().charValue();
i = 0;
int count;
double a, b, d;
Stack<Double> mystack1 = new Stack<Double>();
while (i < j) {
c = anArray[i];
switch (c) {
case '+':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
d = b + a;
mystack1.push(new Double(d));
i++;
break;
case '-':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
d = b - a;
mystack1.push(new Double(d));
i++;
break;
case '*':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
d = b * a;
mystack1.push(new Double(d));
i++;
break;
case '/':
a = mystack1.pop().doubleValue();
b = mystack1.pop().doubleValue();
if (a != 0) {
d = b / a;
mystack1.push(new Double(d));
i++;
} else {
System.out.println("除数不能为零!");
}
break;
default:
d = 0;
count = 0;
while ((c >= '0' && c <= '9')) {
d = 10 * d + c - '0';
i++;
c = anArray[i];
}
if (c == '.') {
i++;
c = anArray[i];
while ((c >= '0' && c <= '9')) {
count++;
d = d + (c - '0') / Math.pow(10, count);
i++;
c = anArray[i];
}
}
if (c == '#')
mystack1.push(new Double(d));
i++;
break;
}
}
return (mystack1.peek().doubleValue());
}
/* private void leftFld(JButton button,boolean onePush){
if(onePush&&tag){
tag = false;
String str = button.getText()+ Calculator.txtFld.getText();
int locate = str.lastIndexOf('0');
Calculator.txtFld.setText(str.substring(0,locate)+'.');
}
else{
String str = Calculator.txtFld.getText();
int pointLoc = Calculator.txtFld.getText().indexOf('.');
Calculator.txtFld.setText(str.substring(0,pointLoc).concat(button.getText()+'.'));
}
}*/
}