// GridBagLayout을 이용하여 계산기 프로그램
import java.awt.*;
import java.awt.event.*;
public class Calculator extends Frame{
GridBagLayout layout = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9,
bPlus, bMinus, bMul, bDiv, bEqual, bClear, bDot;
Label T1;
public static void main (String[] args) {
Calculator aWindow = new Calculator ();
}//메인끗
public Calculator () {
setTitle ("GridBagLayout Window");
setLayout (layout);
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets (5, 5, 5, 5);
constraints.weightx = constraints.weighty = 1.0;
//버튼을 생성하여 위치를 정한 다음, addComponent()를 호출한다.
T1 = new Label("",Label.RIGHT);
addComponent (0, 0, 4, 1, T1);
addComponent (0, 1, 1, 1, bClear = new Button ("CL"));
addComponent (0, 2, 1, 1, b1 = new Button ("1"));
addComponent (0, 3, 1, 1, b4 = new Button ("4"));
addComponent (0, 4, 1, 1, b7 = new Button ("7"));
addComponent (0, 5, 2, 1, b0 = new Button ("0"));
addComponent (1, 1, 1, 1, bDiv = new Button ("/"));
addComponent (1, 2, 1, 1, b2 = new Button ("2"));
addComponent (1, 3, 1, 1, b5 = new Button ("5"));
addComponent (1, 4, 1, 1, b8 = new Button ("8"));
addComponent (2, 1, 1, 1, bMul = new Button ("*"));
addComponent (2, 2, 1, 1, b3 = new Button ("3"));
addComponent (2, 3, 1, 1, b6 = new Button ("6"));
addComponent (2, 4, 1, 1, b9 = new Button ("9"));
addComponent (2, 5, 1, 1, bDot = new Button ("."));
addComponent (3, 1, 1, 1, bMinus = new Button ("-"));
addComponent (3, 2, 1, 2, bPlus = new Button ("+"));
addComponent (3, 4, 1, 2, bEqual = new Button ("="));
bClear.addActionListener(new scaButtonHandler(T1));
b1.addActionListener(new scaButtonHandler(T1));
b2.addActionListener(new scaButtonHandler(T1));
b3.addActionListener(new scaButtonHandler(T1));
b4.addActionListener(new scaButtonHandler(T1));
b5.addActionListener(new scaButtonHandler(T1));
b6.addActionListener(new scaButtonHandler(T1));
b7.addActionListener(new scaButtonHandler(T1));
b8.addActionListener(new scaButtonHandler(T1));
b9.addActionListener(new scaButtonHandler(T1));
b0.addActionListener(new scaButtonHandler(T1));
bDot.addActionListener(new scaButtonHandler(T1));
bMul.addActionListener(new scaButtonHandler(T1));
bPlus.addActionListener(new scaButtonHandler(T1));
bMinus.addActionListener(new scaButtonHandler(T1));
bDiv.addActionListener(new scaButtonHandler(T1));
T1.setText("0");
bEqual.addActionListener(new scaButtonHandler(T1));
FlowLayout Flow1 = new FlowLayout();
Flow1.setAlignment(FlowLayout.RIGHT);
addWindowListener (new WindowHandler());
setBounds (10,10,250,300);
setVisible (true);
}//생성자 끗
// 인수로 컴포넌트와 위치를 넘겨받아, 윈도우에 추가한다.
public void addComponent (int x, int y, int w, int h, Component theComponent) {
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = w;
constraints.gridheight = h;
layout.setConstraints (theComponent, constraints);
add (theComponent);
}
class WindowHandler extends WindowAdapter {
public void windowClosing (WindowEvent e) {
setVisible (false);
dispose();
System.exit (0);
}
}
int FirstValue=0;
int SecondValue=0;
int TempValue=0;
}//calculator끗
/*
class ButtonControl implements ActionListener{
public void actionPerformed(ActionEvent ae){
T1.setText(T1.getText() + ((Button)ae.getSource()).getLabel() );
}//액션펄폼드끗
}//버튼콘트롤 끗/
*/
class scaButtonHandler implements ActionListener{
Label T1;
String StText=new String("0");
static Double TempNumber = new Double(0);
static Double FirstNumber = new Double(0);
static Double SecondNumber = new Double(0);
static Double ReseltNumber = new Double(0);
static int iReseltNumber = 0;
static char oper = 0;
static int swit = 0;
static int lapperswit = 0;
static int Reselt=0;
scaButtonHandler(Label paraField){
T1 = paraField;
}
Double Lapper(Double FNmb,Double SNmb,char oper){
if(oper == '+'){
return (FNmb+SNmb);
}
else if(oper == '-'){
return (FNmb-SNmb);
}
else if(oper == '/'){
if(SNmb==0) return 0.0;
else return (FNmb/SNmb);
}
else if(oper == '*'){
return (FNmb*SNmb);
}
return 0.0;
}
public void actionPerformed(ActionEvent ae){
if(((Button)ae.getSource()).getLabel()=="="){
if(FirstNumber==0) ReseltNumber = Lapper(ReseltNumber,SecondNumber,oper);
else
{
SecondNumber = Double.parseDouble(T1.getText());
ReseltNumber = Lapper(FirstNumber,SecondNumber,oper);
}
FirstNumber = 0.0;
if(ReseltNumber%1==0) T1.setText(ReseltNumber.intValue()+"");
else T1.setText(ReseltNumber+"");
Reselt=1;
}
else if(((Button)ae.getSource()).getLabel()=="+"){
if(FirstNumber == 0)
{
FirstNumber = Double.parseDouble(T1.getText());
lapperswit=1;
T1.setText("0");
oper = '+';
swit = 0;
}
else
{
if(lapperswit==0)
{
SecondNumber = Double.parseDouble(T1.getText());
FirstNumber = Lapper(FirstNumber,SecondNumber,oper);
if(FirstNumber%1==0) T1.setText(FirstNumber.intValue()+"");
else T1.setText(FirstNumber+"");
lapperswit=1;
oper = '+';
}
}
}
else if(((Button)ae.getSource()).getLabel()=="-"){
if(FirstNumber == 0)
{
FirstNumber = Double.parseDouble(T1.getText());
lapperswit=1;
T1.setText("0");
oper = '-';
swit = 0;
}
else
{
if(lapperswit==0)
{
SecondNumber = Double.parseDouble(T1.getText());
FirstNumber = Lapper(FirstNumber,SecondNumber,oper);
if(FirstNumber%1==0) T1.setText(FirstNumber.intValue()+"");
else T1.setText(FirstNumber+"");
lapperswit=1;
oper = '-';
}
}
}
else if(((Button)ae.getSource()).getLabel()=="*"){
if(FirstNumber == 0)
{
FirstNumber = Double.parseDouble(T1.getText());
lapperswit=1;
T1.setText("0");
oper = '*';
swit = 0;
}
else
{
if(lapperswit==0)
{
SecondNumber = Double.parseDouble(T1.getText());
FirstNumber = Lapper(FirstNumber,SecondNumber,oper);
if(FirstNumber%1==0) T1.setText(FirstNumber.intValue()+"");
else T1.setText(FirstNumber+"");
lapperswit=1;
oper = '*';
}
}
}
else if(((Button)ae.getSource()).getLabel()=="/"){
if(FirstNumber == 0)
{
FirstNumber = Double.parseDouble(T1.getText());
lapperswit=1;
T1.setText("0");
oper = '/';
swit = 0;
}
else
{
if(lapperswit==0)
{
SecondNumber = Double.parseDouble(T1.getText());
FirstNumber = Lapper(FirstNumber,SecondNumber,oper);
if(FirstNumber%1==0) T1.setText(FirstNumber.intValue()+"");
else T1.setText(FirstNumber+"");
lapperswit=1;
oper = '/';
}
}
}
// "."을 눌럿을경우
else if(((Button)ae.getSource()).getLabel()=="."){
if(swit==0)
{
T1.setText(T1.getText() +((Button)ae.getSource()).getLabel()+"0");
swit = 1;
}
}
// "CL"을 눌럿을경우
else if(((Button)ae.getSource()).getLabel()=="CL"){
T1.setText("0");
swit = 0;
lapperswit=0;
TempNumber = 0.0;
FirstNumber = 0.0;
SecondNumber = 0.0;
ReseltNumber = 0.0;;
TempNumber = Double.parseDouble(T1.getText());
}
// 숫자를 눌럿을경우
else if(((Button)ae.getSource()).getLabel()=="0"){
if(Double.parseDouble(T1.getText())!=0)
{
T1.setText(T1.getText() +((Button)ae.getSource()).getLabel());
TempNumber = Double.parseDouble(T1.getText());
}
}
else
{
if(Reselt==1)
{
T1.setText("0");
Reselt=0;
}
if(lapperswit==1)
{
T1.setText("0");
lapperswit=0;
}
if(Double.parseDouble(T1.getText())!=0)
{
if((Double.parseDouble(T1.getText())%1)==0)
{
if(swit==1)
{
T1.setText((int)(Double.parseDouble(T1.getText())/1) +"."+((Button)ae.getSource()).getLabel());
TempNumber = Double.parseDouble(T1.getText());
}
else
{
T1.setText(T1.getText()+((Button)ae.getSource()).getLabel());
TempNumber = Double.parseDouble(T1.getText());
}
}
else
{
T1.setText(T1.getText()+((Button)ae.getSource()).getLabel());
TempNumber = Double.parseDouble(T1.getText());
}
}
else
{
if(swit==1)
{
T1.setText("0." +((Button)ae.getSource()).getLabel());
TempNumber = Double.parseDouble(T1.getText());
}
else
{
T1.setText(((Button)ae.getSource()).getLabel());
TempNumber = Double.parseDouble(T1.getText());
}
}
}
}//액션펄폼드끗
}//버튼콘트롤 끗/
'javabasic' 카테고리의 다른 글
자바강의2 (0) | 2010.07.22 |
---|---|
자바 강의 (0) | 2010.07.22 |
연습문제 3장 3번문제 (0) | 2010.07.07 |
3장 2번문제 (0) | 2010.07.07 |
연습문제3장1번문제 (0) | 2010.07.07 |