GUI 에 계산기 만들기 완성하기. 형태 만들기 및 간단한 작동원리는 아래 주소 참조. http://blog.naver.com/pandekten5/220776972561 00. 코딩하고 실행 해보자. 01. 계산기 GUI창이 뜬다. 02. 임의의 숫자버튼(여기서는 2)을 눌러서 표기되는것을 확인하자. 03. 3/2 를 누르고 결과값이 맞게 출력되는지 확인하자. 또한, 아래 3이 저장되어서 divide 오퍼레이션을 써서 된것을 확인할 수 있다. ※. 코드 import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; class MyFrame extends JFrame implements ActionListener { private JPanel displayPanel; private JPanel buttonPanel; private JPanel debugPanel; private JTextField display; private JButton[] buttons; // 0 ~ 9 private JButton btnPlus; private JButton btnMinus; private JButton btnProduct; private JButton btnDivide; private JButton btnEqual; private JButton btnCE; private JLabel prev; private JLabel operator; private JLabel flag; public MyFrame() { this.setSize(300, 400); this.setTitle("GUI TEST"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Programming Here this.setLayout(new BorderLayout()); /* * 3개의 panel 객체 만들고 각자 layout 설정 */ displayPanel = new JPanel(); buttonPanel = new JPanel(); debugPanel = new JPanel(); displayPanel.setLayout(new FlowLayout()); buttonPanel.setLayout(new GridLayout(0,4, 5, 5)); debugPanel.setLayout(new FlowLayout()); /* * displayPanel의 component를 만들어서 붙이기 */ display = new JTextField(11); display.setText("0"); display.setHorizontalAlignment(JTextField.RIGHT); Font font = new Font("Serif", Font.BOLD, 30); display.setFont(font); displayPanel.add(display); /* * buttonPanel에 component 만들고, 붙이기 */ Font fontBtn = new Font("Serif", Font.BOLD, 20); buttons = new JButton[10]; // 실제 버튼 객체 생성 for(int i=0; i<buttons.length; i++) { //buttons[i] = new JButton("" + i); buttons[i] = new JButton(Integer.toString(i)); buttons[i].setFont(fontBtn); buttons[i].addActionListener(this); } btnPlus = new JButton("+"); btnMinus = new JButton("-"); btnProduct = new JButton("*"); btnDivide = new JButton("/"); btnEqual = new JButton("="); btnCE = new JButton("CE"); btnPlus.addActionListener(this); btnMinus.addActionListener(this); btnProduct.addActionListener(this); btnDivide.addActionListener(this); btnEqual.addActionListener(this); btnCE.addActionListener(this); // 1 2 3 + // 4 5 6 - // 7 8 9 * // 0 / = CE buttonPanel.add(buttons[1]); buttonPanel.add(buttons[2]); buttonPanel.add(buttons[3]); buttonPanel.add(btnPlus); buttonPanel.add(buttons[4]); buttonPanel.add(buttons[5]); buttonPanel.add(buttons[6]); buttonPanel.add(btnMinus); buttonPanel.add(buttons[7]); buttonPanel.add(buttons[8]); buttonPanel.add(buttons[9]); buttonPanel.add(btnProduct); buttonPanel.add(buttons[0]); buttonPanel.add(btnDivide); buttonPanel.add(btnCE); buttonPanel.add(btnEqual); /* * debugPanel에 debugMsg, btnDebug 만들어서 붙이기 */ prev = new JLabel(""); operator = new JLabel(""); flag = new JLabel(""); debugPanel.add( new JLabel("PREV:")); debugPanel.add(prev); debugPanel.add( new JLabel("OPERATOR:")); debugPanel.add(operator); debugPanel.add( new JLabel("FLAG:")); debugPanel.add(flag); /* * frame에다가 panel 붙이기 */ this.add(displayPanel, BorderLayout.NORTH); this.add(buttonPanel, BorderLayout.CENTER); this.add(debugPanel, BorderLayout.SOUTH); //debugPanel.setVisible(false); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { for(int i=0; i<buttons.length; i++) { if(e.getSource() == buttons[i]) { if(display.getText().equals("0")) { display.setText(""+i); // display.setText(Integer.toString(i)); }else { if(operator.getText().equals("")) { display.setText( display.getText() + i); }else { if(flag.getText().equals("")) { display.setText(""+i); flag.setText("#"); }else { display.setText( display.getText() + i); } } } } } if(e.getSource() == btnEqual) { double op1, op2, result; op1 = Double.parseDouble(prev.getText()); //문자->숫자(double) op2 = Double.parseDouble(display.getText()); if(operator.getText().equals("+")) { result = op1 + op2; display.setText("" + result); // display.setText( String.valueOf(result)); } if(operator.getText().equals("-")) { result = op1 - op2; display.setText("" + result); // display.setText( String.valueOf(result)); } if(operator.getText().equals("*")) { result = op1 * op2; display.setText("" + result); // display.setText( String.valueOf(result)); } if(operator.getText().equals("/")) { result = op1 / op2; display.setText("" + result); // display.setText( String.valueOf(result)); } } if(e.getSource() == btnPlus) { prev.setText( display.getText() ); operator.setText("+"); flag.setText(""); } if(e.getSource() == btnMinus) { prev.setText( display.getText() ); operator.setText("-"); flag.setText(""); } if(e.getSource() == btnProduct) { prev.setText( display.getText() ); operator.setText("*"); flag.setText(""); } if(e.getSource() == btnDivide) { prev.setText( display.getText() ); operator.setText("/"); flag.setText(""); } if(e.getSource() == btnCE) { display.setText("0"); prev.setText(""); operator.setText(""); flag.setText(""); } } } public class Test { public static void main(String[] args) { MyFrame frame = new MyFrame(); } } |