import java.awt.*;
import java.awt.event.*;
public class CalculatorGUI extends Frame implements ActionListener,ItemListener {
String name_01,name_02;
double Num2=0;
double buf;
private Label ans;
private Button key1,key2,key3, key4,key5,key6;
private Button key7,key8,key9,key0,keydot;
private Button keyPlus,keyMin,keyMul,keyDiv,keyEquel,keyCE,KeyC;
private Button keyBack,MC,MR,MS,Mplus;
private Button keySqrt,keyPer,keyDivX,keyPM;
private Button keyPi;
private Button keySta,keyAve,keySum,keyS,keyDat;
private Button keyFE,keyLG,keyRG,keyDms,keySin,keyCos,keyTan,keyExp,keyln;
private Button keyxy,keyx3,keyx2,keylog,keyNnot,keyMod,keyOr,keyLsh,keyAnd;
private Button keyXor,keyNot,keyInt,keyA,keyB,keyC,keyD,keyE,keyF;
char OPS='=';
boolean OPStart, OPPer, OPPM;
CheckboxGroup cbg, cbg2;
Checkbox hex, dec, oct, bin, linux, Degrees,Radians,Grads, Inv, Hyp;
private MenuItem viewNomalMenu;
private MenuItem viewGongMenu;
private MenuItem copyMenu;
private MenuItem pasteMenu;
private MenuItem aboutMenu ;
Menu view = new Menu("보기");
StringBuffer sp=new StringBuffer();
Panel panel,pa,panel2;
Panel Pt ,Pt2;
Panel Gong1,Gong2,Gong3,Gongtotal,p1,p2,p3,p4,p5,p6;
private double Num;
private double result;
public CalculatorGUI(){
super("계산기");
CalculNomal();
MenuBar menubar = new MenuBar();
setMenuBar(menubar);
Menu Edit = new Menu("편집");
copyMenu = new MenuItem("복사");
pasteMenu = new MenuItem("붙여넣기");
Edit.add(copyMenu );
Edit.add(pasteMenu );
Menu help = new Menu("도움말");
aboutMenu = new MenuItem("About");
help.add(aboutMenu);
menubar.add(Edit);
menubar.add(view);
menubar.add(help);
aboutMenu.addActionListener( this);
setSize(300,200);
setVisible(true);
addWindowListener(new WindowHandler());
}
private void CalculNomal(){
ans = new Label("0",Label.RIGHT);
add(ans, BorderLayout.NORTH);
OPS='=';
OPStart=false;
OPPer=false;
OPPM=false;
panel2=new Panel();
panel=new Panel();
Pt= new Panel();
Pt2 =new Panel();
Pt.setLayout(new GridLayout(4,5,4,4));
Pt2.setLayout(new GridLayout(1,4,4,4));
panel2.setLayout(new GridLayout(4,1,4,4));
keyBack=new Button("BackSpace");
MC = new Button("MC");
MR = new Button("MR");
MS = new Button("MS");
Mplus=new Button("M+");
key1=new Button("1");
key2=new Button("2");
key3=new Button("3");
key4=new Button("4");
key5=new Button("5");
key6=new Button("6");
key7=new Button("7");
key8=new Button("8");
key9=new Button("9");
key0=new Button("0");
keyPlus=new Button("+");
keyMin=new Button("-");
keyMul=new Button("*");
keyDiv=new Button("/");
keyEquel=new Button("=");
keyCE=new Button("CE");
KeyC=new Button("C");
keydot=new Button(".");
keySqrt=new Button("Sqrt");
keyPer=new Button("%");
keyDivX=new Button("1/x");
keyPM=new Button("+/-");
Pt.add(key7);
Pt.add(key8);
Pt.add(key9);
Pt.add(keyDiv);
Pt.add(keySqrt);
Pt.add(key4);
Pt.add(key5);
Pt.add(key6);
Pt.add(keyMul);
Pt.add(keyPer);
Pt.add(key1);
Pt.add(key2);
Pt.add(key3);
Pt.add(keyMin);
Pt.add(keyDivX);
Pt.add(key0);
Pt.add(keyPM);
Pt.add(keydot);
Pt.add(keyPlus);
Pt.add(keyEquel);
Pt2.add(keyBack);
Pt2.add(keyCE);
Pt2.add(KeyC);
panel2.add(MC);
panel2.add(MR);
panel2.add(MS);
panel2.add(Mplus);
NumberButtonHandler num=new NumberButtonHandler();
OpButtonHandler Op = new OpButtonHandler();
CEButtonHandler CE = new CEButtonHandler();
CButtonHandler C = new CButtonHandler();
PMButtonHandler Pm = new PMButtonHandler();
BackButtonHandler Back = new BackButtonHandler();
SOPButtonHandler SOP = new SOPButtonHandler();
key1.addActionListener(num);
key2.addActionListener(num);
key3.addActionListener(num);
key4.addActionListener(num);
key5.addActionListener(num);
key6.addActionListener(num);
key7.addActionListener(num);
key8.addActionListener(num);
key9.addActionListener(num);
key0.addActionListener(num);
keydot.addActionListener(num);
keyPlus.addActionListener(Op);
keyMin.addActionListener(Op);
keyMul.addActionListener(Op);
keyDiv.addActionListener(Op);
keyEquel.addActionListener(Op);
keydot.addActionListener(Op);
keyCE.addActionListener(CE);
keyPer.addActionListener(Op);
KeyC.addActionListener(C);
keyBack.addActionListener(Back);
keyPM.addActionListener(Pm);
keySqrt.addActionListener(SOP);
keyDivX.addActionListener(SOP);
panel.setLayout(new BorderLayout(10,6));
panel.add(Pt2,BorderLayout.NORTH);
panel.add(Pt,BorderLayout.CENTER);
panel.add(panel2,BorderLayout.WEST);
add(panel,BorderLayout.CENTER);
name_01=" 공학용";
name_02="●일반용";
viewGongMenu = new MenuItem(name_01);
viewNomalMenu = new MenuItem(name_02);
view.removeAll();
view.add(viewGongMenu);
view.add(viewNomalMenu);
viewGongMenu.addActionListener( this);
viewNomalMenu.addActionListener( this);
}
public void CalculGong(){
cbg= new CheckboxGroup();
cbg2= new CheckboxGroup();
ans = new Label("0",Label.RIGHT);
add(ans, BorderLayout.NORTH);
OPS='=';
OPStart=false;
Inv=new Checkbox("Inv",true);
Hyp=new Checkbox("Hyp");
Degrees=new Checkbox("Degrees",cbg2,true);
Radians=new Checkbox("Radians",cbg2,false);
Grads=new Checkbox("Grads",cbg2,false);
hex = new Checkbox("Hex", cbg, true);
dec = new Checkbox("Dec", cbg, false);
oct = new Checkbox("Oct", cbg, false);
bin= new Checkbox("Bin", cbg, false);
panel2=new Panel();
panel=new Panel();
p1=new Panel();
p2=new Panel();
p3=new Panel();
p4=new Panel();
p5=new Panel();
p6=new Panel();
Pt= new Panel();
Pt2 =new Panel();
Gong1=new Panel();
Gong2=new Panel();
Gong3=new Panel();
Gongtotal=new Panel();
Gongtotal.setLayout(new GridLayout(1,2,5,5));
Gong1.setLayout(new GridLayout(5,1,4,4));
Gong2.setLayout(new GridLayout(5,3,4,4));
Gong3.setLayout(new GridLayout(2,1,4,4));
Pt.setLayout(new GridLayout(5,6,4,4));
Pt2.setLayout(new GridLayout(2,1,4,4));
p1.setLayout((new GridLayout(1,3,4,4)));
p2.setLayout((new GridLayout(1,3,4,4)));
p3.setLayout((new GridLayout(1,4,4,4)));
p4.setLayout((new GridLayout(1,4,4,4)));
panel2.setLayout(new GridLayout(5,1,4,4));
keyBack=new Button("BackSpace");
MC = new Button("MC");
MR = new Button("MR");
MS = new Button("MS");
Mplus=new Button("M+");
key1=new Button("1");
key2=new Button("2");
key3=new Button("3");
key4=new Button("4");
key5=new Button("5");
key6=new Button("6");
key7=new Button("7");
key8=new Button("8");
key9=new Button("9");
key0=new Button("0");
keyPlus=new Button("+");
keyMin=new Button("-");
keyMul=new Button("*");
keyDiv=new Button("/");
keyEquel=new Button("=");
keyCE=new Button("CE");
KeyC=new Button("C");
keydot=new Button(".");
keySqrt=new Button("Sqrt");
keyPer=new Button("%");
keyDivX=new Button("1/x");
keyPM=new Button("+/-");
keyPi=new Button("Pi");
keySta=new Button("Sta");
keyAve=new Button("Ave");
keySum=new Button("Sum");
keyS=new Button("S");
keyDat=new Button("Dat");
keyFE=new Button("F-E");
keyLG=new Button("(");
keyRG=new Button(")");
keyDms=new Button("dms");
keySin=new Button("sin");
keyCos=new Button("cos");
keyTan=new Button("tan");
keyExp=new Button("Exp");
keyln=new Button("ln");
keyxy=new Button("x^y");
keyx3=new Button("x^3");
keyx2=new Button("x^2");
keylog=new Button("log");
keyNnot=new Button("n!");
keyMod=new Button("Mod");
keyOr=new Button("Or");
keyLsh=new Button("Lsh");
keyAnd=new Button("And");
keyXor=new Button("Xor");
keyNot=new Button("Not");
keyInt=new Button("int");
keyA=new Button("A");
keyB=new Button("B");
keyC=new Button("C");
keyD=new Button("D");
keyE=new Button("E");
keyF=new Button("F");
keyA.enable(false);
keyB.enable(false);
keyC.enable(false);
keyD.enable(false);
keyE.enable(false);
keyF.enable(false);
keyAve.enable(false);
keySum.enable(false);
keyS.enable(false);
keyDat.enable(false);
p1.add(Degrees);
p1.add(Radians);
p1.add(Grads);
p3.add(hex);
p3.add(dec);
p3.add(oct);
p3.add(bin);
p4.add(Inv);
p4.add(Hyp);
p4.add(new Label());
Gong3.add(p3);
Gong3.add(p4);
Gong1.add(keySta);
Gong1.add(keyAve);
Gong1.add(keySum);
Gong1.add(keyS);
Gong1.add(keyDat);
Gong2.add(keyFE);
Gong2.add(keyLG);
Gong2.add(keyRG);
Gong2.add(keyDms);
Gong2.add(keyExp);
Gong2.add(keyln);
Gong2.add(keySin);
Gong2.add(keyxy);
Gong2.add(keylog);
Gong2.add(keyCos);
Gong2.add(keyx3);
Gong2.add(keyNnot);
Gong2.add(keyTan);
Gong2.add(keyx2);
Gong2.add(keyDivX);
p5.setLayout(new BorderLayout(10,6));
p5.add(Gong3,BorderLayout.NORTH);
p5.add(Gong2,BorderLayout.CENTER);
p5.add(Gong1,BorderLayout.WEST);
p5.add(panel2,BorderLayout.EAST);
Pt.add(key7);
Pt.add(key8);
Pt.add(key9);
Pt.add(keyDiv);
Pt.add(keyMod);
Pt.add(keyAnd);
Pt.add(key4);
Pt.add(key5);
Pt.add(key6);
Pt.add(keyMul);
Pt.add(keyOr);
Pt.add(keyXor);
Pt.add(key1);
Pt.add(key2);
Pt.add(key3);
Pt.add(keyMin);
Pt.add(keyLsh);
Pt.add(keyNot);
Pt.add(key0);
Pt.add(keyPM);
Pt.add(keydot);
Pt.add(keyPlus);
Pt.add(keyEquel);
Pt.add(keyInt);
Pt.add(keyA);
Pt.add(keyB);
Pt.add(keyC);
Pt.add(keyD);
Pt.add(keyE);
Pt.add(keyF);
p2.add(keyBack);
p2.add(keyCE);
p2.add(KeyC);
panel2.add(MC);
panel2.add(MR);
panel2.add(MS);
panel2.add(Mplus);
panel2.add(keyPi);
Pt2.add(p1);
Pt2.add(p2);
NumberButtonHandler num=new NumberButtonHandler();
OpButtonHandler Op = new OpButtonHandler();
CEButtonHandler CE = new CEButtonHandler();
CButtonHandler C = new CButtonHandler();
BackButtonHandler Back = new BackButtonHandler();
key1.addActionListener(num);
key2.addActionListener(num);
key3.addActionListener(num);
key4.addActionListener(num);
key5.addActionListener(num);
key6.addActionListener(num);
key7.addActionListener(num);
key8.addActionListener(num);
key9.addActionListener(num);
key0.addActionListener(num);
keydot.addActionListener(num);
keyPlus.addActionListener(Op);
keyMin.addActionListener(Op);
keyMul.addActionListener(Op);
keyDiv.addActionListener(Op);
keyEquel.addActionListener(Op);
keydot.addActionListener(Op);
keyCE.addActionListener(CE);
KeyC.addActionListener(C);
keyBack.addActionListener(Back);
panel.setLayout(new BorderLayout(10,6));
panel.add(Pt2,BorderLayout.NORTH);
panel.add(Pt,BorderLayout.CENTER);
Gongtotal.add(p5);
Gongtotal.add(panel);
add(Gongtotal,BorderLayout.CENTER);
name_01="●공학용";
name_02=" 일반용";
viewGongMenu = new MenuItem(name_01);
viewNomalMenu = new MenuItem(name_02);
view.removeAll();
view.add(viewGongMenu);
view.add(viewNomalMenu);
viewGongMenu.addActionListener( this);
viewNomalMenu.addActionListener( this);
}
public class PMButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e){
if(!OPPM){
sp.insert(0,'-');
OPPM=true;
}
else{
sp.deleteCharAt(0);
OPPM=false;
}
ans.setText(sp.toString());
}
}
public void itemStateChanged(ItemEvent ie) {
}
private class NumberButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
sp.append(e.getActionCommand());
ans.setText(sp.toString());
}
}
private class SOPButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
Num = parseNumber(sp.toString());
if(e.getActionCommand()=="Sqrt"){
result=Math.sqrt(Num);
ans.setText(String.valueOf(result));
}
else if(e.getActionCommand()=="1/x"){
result=1/Num;
ans.setText(String.valueOf(result));
}
}
}
private static double parseNumber(String number) {
double real_number;
try {
real_number = Double.parseDouble(number);
} catch (NumberFormatException e) {
real_number = Double.NaN;
}
return real_number;
}
private class OpButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
char op=e.getActionCommand().charAt(0);
Num = parseNumber(sp.toString());
switch(op){
case '+':
Operater(Num);
OPS='+';
OPStart=true;
sp.setLength(0);
ans.setText(String.valueOf(result));
break;
case '-':Operater(Num);
OPS='-';
OPStart=true;
sp.setLength(0);
ans.setText(String.valueOf(result));
break;
case '*':Operater(Num);
OPS='*';
OPStart=true;
sp.setLength(0);
ans.setText(String.valueOf(result));
break;
case '/':Operater(Num);
OPS='/';
OPStart=true;
sp.setLength(0);
ans.setText(String.valueOf(result));
break;
case '=':
if(OPPer)Operater(Num2);
else Operater(Num);
sp.setLength(0);
ans.setText(String.valueOf(result));
OPStart=false;
OPPer=false;
break;
case '%':
Num2=result;
if(OPStart){
result=result*(Num/100);
}
OPPer=true;
sp.setLength(0);
ans.setText(String.valueOf(result));
break;
}
}
}
public double Operater(double Num){
if(!OPStart)result=Num;
switch(OPS){
case '+':
result=result+Num;
break;
case '-':
result=result-Num;
break;
case '*':
result=result*Num;
break;
case '/':
result=result/Num;
break;
case '=':
result=Num;
break;
}return result;
}
private class CButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
OPStart=false;
OPPM=false;
OPPer=false;
OPS='=';
Num=0;
result=0;
sp.setLength(0);
ans.setText("0");
}
}
private class BackButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
if(sp.length()>1){
int leng=sp.length()-1;
sp.deleteCharAt(leng);
ans.setText(sp.toString());
}
else ans.setText("0");
}
}
private class CEButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
OPStart=false;
OPPM=false;
OPPer=false;
OPS='=';
ans.setText("0");
}
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() ==aboutMenu){
AboutDialog mydlg = new AboutDialog(this, "about", true);
mydlg.show();
}else if(e.getSource() == viewGongMenu) {
setVisible(false);
dispose();
removeAll();
CalculGong();
setSize(600,300);
setVisible(true);
}
else if(e.getSource() == viewNomalMenu) {
setVisible(false);
dispose();
removeAll();
CalculNomal();
setSize(300,200);
setVisible(true);
}
}
private class AboutDialog extends Dialog implements ActionListener {
public AboutDialog(Frame parent, String title, boolean modal) {
super(parent, title, modal);
add(new Label("mint"),BorderLayout.NORTH);
add(new Label("mint"), BorderLayout.EAST);
Button b = new Button("OK");
add(b, BorderLayout.SOUTH);
pack();
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
}
public class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
Window w = e.getWindow();
w.setVisible(false);
w.dispose();
System.exit(0);
}
}
public static void main(String[] args) {
new CalculatorGUI();
}
}
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."