계산기
package calcu;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class calculaotr extends JFrame implements ActionListener{
String[] str = {"CE", "계산", "+", "-", "x", "%"};
JTextField tf1, tf2;
String numStr="0";
public calculaotr() {
setTitle("계산기");
setSize(300, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
JPanel top = new JPanel();
JPanel bottom = new JPanel();
JPanel body = new JPanel();
top.setBackground(Color.LIGHT_GRAY);
bottom.setBackground(Color.LIGHT_GRAY);
body.setLayout(new GridLayout(4, 4, 5, 5));
JLabel label1 = new JLabel("수식입력");
tf1 = new JTextField(15);
tf1.setText(numStr);
top.add(label1);
top.add(tf1);
JLabel label2 = new JLabel("계산결과");
tf2 = new JTextField(15);
bottom.add(label2);
bottom.add(tf2);
for (int i = 0; i < 16; i++) {
JButton b = new JButton();
if (i < 10) {
b.setText(i + "");
b.setBackground(Color.WHITE);
} else {
b.setText(str[i - 10]);
b.setBackground(Color.WHITE);
}
if (i > 11)
b.setBackground(Color.WHITE);
body.add(b);
b.addActionListener(this);
}
c.add(body);
c.add(top, BorderLayout.NORTH);
c.add(bottom, BorderLayout.SOUTH);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if(str.equals("CE")) {
numStr = "0";
tf1.setText("0");
tf2.setText("");
}
else if(str.equals("계산")) {
StringTokenizer st = new StringTokenizer(numStr, "+-x%", true);
ArrayList<String> result = new ArrayList<String>();
int lang = st.countTokens();
for(int i=0; i < lang; i++) {
result.add(st.nextToken());
}
for(int i=1; i<lang; i+=2) {
if(result.get(i).equals("x")) {
int x = Integer.parseInt(result.get(i-1))*Integer.parseInt(result.get(i+1));
result.remove(i-1);
result.add((i-1),x+"");
result.remove(i);
result.remove(i);
i -= 2;
lang = result.size();
}else if(result.get(i).equals("%")) {
int x = Integer.parseInt(result.get(i-1))*Integer.parseInt(result.get(i+1));
result.remove(i-1);
result.add((i-1),x+"");
result.remove(i);
result.remove(i);
i -= 2;
lang = result.size();
}
}
for(int i=1; i<result.size(); i+=2) {
if(result.get(i).equals("+")) {
int x = Integer.parseInt(result.get(i-1))+Integer.parseInt(result.get(i+1));
result.remove(i-1);
result.add((i-1),x+"");
result.remove(i);
result.remove(i);
i -= 2;
lang = result.size();
}else if(result.get(i).equals("-")) {
int x = Integer.parseInt(result.get(i-1))-Integer.parseInt(result.get(i+1));
result.remove(i-1);
result.add((i-1),x+"");
result.remove(i);
result.remove(i);
i -= 2;
lang = result.size();
}
}
tf2.setText(result.get(0));
numStr="0";
tf1.setText(numStr);
}else {
if(numStr.equals("0") || numStr.equals("0x") || numStr.equals("0-") || numStr.equals("0+") || numStr.equals("0%")) {
if(str.equals("+")) { numStr="0+"; tf1.setText(numStr);}
else if(str.equals("-")) { numStr="0-"; tf1.setText(numStr);}
else if(str.equals("x")) { numStr="0x"; tf1.setText(numStr);}
else if(str.equals("%")) { numStr="0%"; tf1.setText(numStr);}
else {
if(numStr.equals("0")) numStr = "";
numStr+=str;
tf1.setText(numStr);
}
}else {
numStr+=str;
tf1.setText(numStr);
}
}
}
public static void main(String[] args) {
new calculaotr();
}
}