자바 계산기 | 자바(Java)로 계산기 만들기 (1.모양 구현) 708 투표 이 답변

당신은 주제를 찾고 있습니까 “자바 계산기 – 자바(Java)로 계산기 만들기 (1.모양 구현)“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 동현 이(가) 작성한 기사에는 조회수 7,573회 및 좋아요 73개 개의 좋아요가 있습니다.

자바 계산기 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 자바(Java)로 계산기 만들기 (1.모양 구현) – 자바 계산기 주제에 대한 세부정보를 참조하세요

[자바(Java)] 계산기 만들기 (1.모양 구현)
소스 코드 : https://github.com/DongChyeon/Java-Mini-Projects/tree/master/Calculator
저장할 때 창이 뜬다면 Save as UTF-8로 저장해주세요.

자바 계산기 주제에 대한 자세한 내용은 여기를 참조하세요.

(JAVA/자바) GUI 계산기 만들기 – 코딩하는 코알못

그건 바로 기초 중의 기초라 불리는 계산기 만들기(GUI를 이용해 만들었습니다.) 우선 구동하는 움짤부터. 입력과 지우기(AC는 전체 지우기 / C는 …

+ 여기에 보기

Source: comain.tistory.com

Date Published: 9/16/2022

View: 2672

[클론코딩] 자바로 계산기 구현하기 – 하늘리 개발일기

자바에서 입력한 글자에 글씨체, 포인트, 스타일 등을 지정할 수 있다.. import java.awt.GrLayout;, 행과 열로 레이아웃을 구성하는 클래스 행과 …

+ 여기에 더 보기

Source: code-review.tistory.com

Date Published: 1/8/2022

View: 1204

166. (java/자바) if , else 문을 사용해서 계산기 프로그램 만들기 …

Java. 166. (java/자바) if , else 문을 사용해서 계산기 프로그램 만들기 실시. 투케이2K 2021. 3. 4. 07:51. 320×100. 반응형. /* =========================== */.

+ 더 읽기

Source: kkh0977.tistory.com

Date Published: 2/29/2022

View: 7614

[Java] GUI 계산기 만들기(1) – 챙’s Story – 티스토리

[Java] GUI 계산기 만들기(1). YG_C 2020. 5. 21. 13:46. 계산기 완성. 5/19~5/21 계산기 만들기 … ActionListener; import java.awt.event.

+ 여기에 표시

Source: chaengstory.tistory.com

Date Published: 3/16/2021

View: 2253

java 사칙연산을 할수있는 간단한 계산기 만들기 day3 과 연관

import java.util.Scanner; public Test { public static vo main(String[] args) { /**계산기**/ Scanner scan = new Scanner(System.in); …

+ 더 읽기

Source: cdchan.tistory.com

Date Published: 12/18/2022

View: 6959

[JAVA] 계산기 프로그램 프로젝트_3일차(기능 구현II)

3. 계산기 프로그램 기능 구현II 1) 계산기 프로그램 개발 환경 구분 내용 사용 프로그래밍 언어 JAVA 개발환경 eclipse GUI 관련 주요 클래스 SWING …

+ 여기에 더 보기

Source: shgdx.tistory.com

Date Published: 9/4/2022

View: 3258

[ JAVA/ GUI ] 계산기만들기2/ 이벤트/ 이벤트처리/ 자바이벤트 …

[ JAVA/ GUI ] 계산기만들기2/ 이벤트/ 이벤트처리/ 자바이벤트/ Event/ JavaEvent/ 자바event/ 자바계산기/ 계산기/ 자바로계산기만들기/ 자바GUI …

+ 여기에 더 보기

Source: asterisco.tistory.com

Date Published: 9/3/2021

View: 7415

주제와 관련된 이미지 자바 계산기

주제와 관련된 더 많은 사진을 참조하십시오 자바(Java)로 계산기 만들기 (1.모양 구현). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

자바(Java)로 계산기 만들기 (1.모양 구현)
자바(Java)로 계산기 만들기 (1.모양 구현)

주제에 대한 기사 평가 자바 계산기

  • Author: 동현
  • Views: 조회수 7,573회
  • Likes: 좋아요 73개
  • Date Published: 2020. 8. 7.
  • Video Url link: https://www.youtube.com/watch?v=zFAPpiL17ow

(JAVA/자바) GUI 계산기 만들기

반응형

안녕하세요~ 코딩하는 코알못 코메인입니다.

이번엔 제가 개인 프로젝트(?)를 하나 진행했습니다.

그건 바로 기초 중의 기초라 불리는 계산기 만들기(GUI를 이용해 만들었습니다.)

우선 구동하는 움짤부터

입력과 지우기(AC는 전체 지우기 / C는 한글자 지우기) 각종 계산 루트와 제곱 계산 실수 계산

-구현 기능-

1. 기본적인 사칙연산 구현

2. 양수 음수 계산 구현

3. 실수 계산 (부동소수점때문에 소수점 9자리에서 반올림) 구현

4. 루트와 제곱 연산 구현

5. 전체 초기화 / 한글지 지우기 구현

6. 숫자 최대 입력 길이 구현

7. 한번에 한번만 연산 가능하게 제한

8. 이전 입력 숫자나 연산 결과를 상단에 출력

등등 구현했다.

생각보다 구현하고 싶었던 것들을 구현하는데 시간을 잡아 먹었고 예상 했던 기간보다 오래 걸려버린거같다.

이제 코드다

import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MyCalc extends JFrame { static JLabel label; static JLabel info; double result = 0; String math = “”; double num = 0; String tostring = “”; public MyCalc() { setTitle(“내가 만든 계산 계산기”); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container MyCon = getContentPane(); MyCon.setLayout(new BorderLayout(5, 5)); MyCon.setBackground(Color.LIGHT_GRAY); //입력 값과 결과값이 출력되는 위 패널 생성 후 콘테이너에 추가 UpPanel UP = new UpPanel(); MyCon.add(UP, BorderLayout.EAST); //버튼을 넣을 아래 패널 생성 후 콘테이너에 추가 DownPanel DP = new DownPanel(); MyCon.add(DP, BorderLayout.SOUTH); setSize(350, 600); setVisible(true); } class UpPanel extends JPanel { public UpPanel() { setLayout(new GridLayout(3, 1)); setBackground(Color.LIGHT_GRAY); info = new JLabel(“”); label = new JLabel(“0”); info.setFont(new Font(“맑은 고딕”, 0, 40)); info.setForeground(Color.BLACK); info.setHorizontalAlignment(SwingConstants.RIGHT); label.setFont(new Font(“맑은 고딕”, Font.BOLD , 55)); label.setForeground(Color.BLACK); label.setHorizontalAlignment(SwingConstants.RIGHT); add(info); add(label); } } class DownPanel extends JPanel{ public DownPanel() { JButton[] bt = new JButton[20]; setLayout(new GridLayout(5, 4, 5, 5)); setBackground(Color.DARK_GRAY); bt[0] = new JButton(“×”); bt[1] = new JButton(“÷”); bt[2] = new JButton(“AC”); bt[3] = new JButton(“C”); bt[4] = new JButton(“7”); bt[5] = new JButton(“8”); bt[6] = new JButton(“9”); bt[7] = new JButton(“√”); bt[8] = new JButton(“4”); bt[9] = new JButton(“5”); bt[10] = new JButton(“6”); bt[11] = new JButton(“-“); bt[12] = new JButton(“1”); bt[13] = new JButton(“2”); bt[14] = new JButton(“3”); bt[15] = new JButton(“+”); bt[16] = new JButton(“^2”); bt[17] = new JButton(“0”); bt[18] = new JButton(“.”); bt[19] = new JButton(“=”); for(int i = 0; i <= 19; i++) { bt[i].setPreferredSize(new Dimension(0, 65)); bt[i].setFont(new Font("맑은 고딕", 0, 20)); bt[i].setForeground(Color.BLACK); bt[i].setBackground(new Color(240, 240, 240)); if(3 < i && i < 15 && i % 4 != 3) { bt[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); if(label.getText() == "0") { label.setText(""); } String labeltext = label.getText(); String text = b.getText(); String newtext = labeltext + text; int n = newtext.length(); if(n <= 10) { label.setText(newtext); } if(info.getText().contains("=") == true) { info.setText(""); label.setText(b.getText()); result = 0; num = 0; } } }); }else if(i == 17) { bt[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); String labeltext = label.getText(); String text = b.getText(); String newtext = labeltext + text; if(labeltext == "0") { label.setText("0"); }else { label.setText(newtext); } } }); }else if(i == 19) { bt[i].setBackground(new Color(78, 197, 255)); bt[i].addActionListener(new Result()); }else if(i % 4 == 3 || i < 3 || 15 < i) { bt[i].setBackground(new Color(218, 218, 218)); if(i == 2) { bt[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int n = label.getText().length(); if(n >= 0) { label.setText(“0”); info.setText(“”); } result = 0; } }); }else if(i == 3) { bt[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int n = label.getText().length(); if(n > 0) { setBackSpace(getBackSpace().substring(0, getBackSpace().length() – 1)); } if(label.getText() == “”) { label.setText(“0”); } } }); }else if(i == 18) { bt[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); String labeltext = label.getText(); String text = b.getText(); String newtext = labeltext + text; int n = newtext.length(); if(label.getText().contains(b.getText()) == false && n < 10) { label.setText(newtext); } } }); }else { bt[i].addActionListener(new Result()); } } add(bt[i]); } } } public class Result implements ActionListener{ public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); String labeltext = label.getText(); String text = b.getText(); String newtext = labeltext + text; int n = newtext.length(); if(text != "^2") { num = Double.parseDouble(label.getText().substring(0, n - 1)); } if(math == "+") { result += num; math = ""; }else if(math == "-") { result -= num; math = ""; }else if(math == "×") { result *= num; math = ""; }else if(math == "÷") { result /= num; math = ""; } if(math == "") { math = b.getText(); } if(info.getText() == "" && text != "^2" && text != "=") { info.setText(newtext); result = num; label.setText("0"); }else if(info.getText() != "" && text != "^2" && text != "="){ result = (Math.round(result*1000000000)/1000000000.0); if(result % 1 == 0) { info.setText((int) result + text); label.setText("0"); }else { info.setText(result + text); label.setText("0"); } } if(text == "^2") { num = Double.parseDouble(label.getText().substring(0, n - 2)); math = ""; if(info.getText() == "") { result = (Math.round((Math.pow(num, 2))*1000000000)/1000000000.0); if(result % 1 == 0) { info.setText("pow(" + (int) num + ")"); label.setText(String.valueOf((int) result)); }else { info.setText("pow(" + num + ")"); label.setText(String.valueOf(result)); } }else { if(result % 1 == 0) { info.setText("pow(" + (int) result + ")"); result = (Math.round((Math.pow(result, 2))*1000000000)/1000000000.0); label.setText(String.valueOf((int) result)); }else { info.setText("pow(" + result + ")"); result = (Math.round((Math.pow(result, 2))*1000000000)/1000000000.0); label.setText(String.valueOf(result)); } } } if(text == "√") { math = ""; if(info.getText() == "") { result = (Math.round((Math.sqrt(num))*1000000000)/1000000000.0); if(result % 1 == 0) { info.setText("sqrt(" + (int) num + ")"); label.setText(String.valueOf((int) result)); }else { info.setText("sqrt(" + num + ")"); label.setText(String.valueOf(result)); } }else { if(Math.sqrt(result) % 1 == 0) { info.setText("sqrt(" + (int) result + ")"); result = (Math.round((Math.sqrt(result))*1000000000)/1000000000.0); label.setText(String.valueOf((int) result)); }else { info.setText("sqrt(" + result + ")"); result = (Math.round((Math.sqrt(result))*1000000000)/1000000000.0); label.setText(String.valueOf(result)); } } } if(text == "=") { math = ""; if(info.getText() != "" && label.getText() != "" && info.getText().contains(text) == false) { if(result % 1 == 0) { info.setText(info.getText() + label.getText() + text); label.setText(String.valueOf((int) result)); }else { info.setText(info.getText() + label.getText() + text); label.setText(String.valueOf(result)); } } } } } public double Calculator(String ss) { return 0; } private void setBackSpace(String bs) { label.setText(bs); } private String getBackSpace() { return label.getText(); } public static void main(String[] args) { new MyCalc(); } } 나쁘지 않은 결과물이라 생가한다. 구현하고 싶었던 것들은 대부분 구현하는데 성공했고 수많은 에러를 해결하는 과정도 좋았다. 확실히 이런 프로젝트를 하나 잡고 완성까지 직접 하면 모르던 것들 새로운 것들을 많이 알게되는 것 같고 공부에도 많은 도움이 된다. 다음엔 무엇을 해볼까...? 아 참고로 코드는 깃헙에도 올라가있다. https://github.com/goodunkuck/Project 반응형

[클론코딩] 자바로 계산기 구현하기

🔗YouTube / 동현

1-0 IMPORT 내용 알아보기

import java.awt.Color; 색을 표현하기 위한 클래스

원하는 색의 RGB값만 알고 있으면 객체를 생성하여 사용할 수 있다. 🔗 import java.awt.Font; 글자에 효과를 주기 위한 클래스

자바에서 입력한 글자에 글씨체, 포인트, 스타일 등을 지정할 수 있다. 🔗 import java.awt.GridLayout; 행과 열로 레이아웃을 구성하는 클래스

행과 열의 개수(레이아웃 간의 여백포함)을 지정할 수 있다. 🔗 import java.awt.event.ActionEvent; 이벤트 처리 클래스

버튼이나 윈도우 종료 종료 버튼 등에 사용할 수 있다. 🔗 import java.awt.event.ActionListener; 이벤트 처리 클래스

버튼을 눌렀을 때 그에 대한 동작(값 할당, 이미지 전환 등)을 지정할 수 있다. 🔗 import java.util.ArrayList; 크기가 변하는 배열 클래스(List클래스의 자식)

크기가 가변적으로 변하고, 지정한 크기를 넘어서도 자동으로 메모리가 추가된다. 🔗 import javax.swing.JButton; 버튼 이벤트 처리 클래스

사용자가 버튼을 클릭해야 할 때 사용한다. 🔗 import javax.swing.JFrame; 이벤트 처리 클래스 – 기본

보통 JFrame을 상속받아 레이아웃 / 이벤트를 처리한다. 🔗 import javax.swing.JPanel; 이벤트 프레임 구성 클래스

레이아웃의 적용과 각각의 UI배치를 지정할 수 있다. 🔗 import javax.swing.JTextField; 이벤트 입력 클래스

사용자로부터 텍스트필드(버튼)을 통해 값을 입력받을 수 있다. 🔗

1-1 모양 구현하기

Calculator 프로젝트 생성

default패키지에 Calculator 클래스 생성

JFrame를 이용하여 GUI 형태로 구연함 -> JFrame을 상속받는다.

package A1_materializeShape; import javax.swing.JFrame; public class Calculator extends JFrame{ public Calculator() { //창의 제목, 사이즈, 보이기 여부 등을 지정해줌 setTitle(“계산기”); setVisible(true); setSize(300,370); //화면의 가운데에 띄움 setLocationRelativeTo(null); //사이즈조절 불가능 setResizable(false); //창을 닫을 때 실행 중인 프로그램도 같이 종료되도록 함 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Calculator(); } }

□1단계 출력 결과

1-2 모양 구현하기

창의 사이즈, 위치, 레이아웃 지정

아래 코드의 inputSpace가 계산식이 들어가는 창을 나타내는데,

inputSpace.set00000 로 전체적인 레이아웃을 구성한다.

package A1_materializeShape; import java.awt.Color; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JTextField; public class Calculator extends JFrame{ private JTextField inputSpace; public Calculator() { //계산기의 화면과 버튼을 붙임 – 기본 레이아웃 사용 setLayout(null); //빈공간의 JTextField 생성 inputSpace = new JTextField(); //편집가능여부 : 불가능 (버튼만 사용) inputSpace.setEditable(false); //배경색 설정 inputSpace.setBackground(Color.WHITE); //정렬위치 설정 inputSpace.setHorizontalAlignment(JTextField.RIGHT); //글씨체 설정 inputSpace.setFont(new Font(“Arial”, Font.BOLD, 50)); //위치와 크기(x:8,y:10의 위치에 270×70의 크기) inputSpace.setBounds(8, 10, 270, 70); add(inputSpace); //창의 제목, 사이즈, 보이기 여부 등을 지정해줌 setTitle(“계산기”); setVisible(true); setSize(300,370); //화면의 가운데에 띄움 setLocationRelativeTo(null); //사이즈조절 불가능 setResizable(false); //창을 닫을 때 실행 중인 프로그램도 같이 종료되도록 함 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Calculator(); } }

□2단계 출력 결과

2 계산기능 구현하기

계산기 버튼 생성, 각 버튼에 대한 값 지정과 계산기능 추가

ArrayList, Action메소드를 추가한다.

각 버튼의 배열과 그 배열값에 나타낼 문자를 지정한다.

조건을 통해 버튼을 눌렀을 때의 반응을 지정한다.

현재 코드로는 단순한 계산기능이 가능해졌지만

≫ 사용자는 코드가 원하는 정상의 식을 입력하지 않았을 때(4++-5 등) 정상처리할 수 없다.

≫ 현재 코드로는 첫번째 값에 음수를 입력할 수 없다.

import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculator extends JFrame { private JTextField inputSpace; //계산식의 숫자를 담을 변수 num private String num = “”; //계산 기능을 구현하기 위해 ArrayList에 숫자와 연산 기호를 하나씩 구분해 담음 private ArrayList equation = new ArrayList(); public Calculator() { //계산기의 화면과 버튼을 붙임 – 기본 레이아웃 사용 setLayout(null); //빈공간의 JTextField 생성 inputSpace = new JTextField(); //편집가능여부 : 불가능 (버튼만 사용) inputSpace.setEditable(false); //배경색 설정 inputSpace.setBackground(Color.WHITE); //정렬위치 설정 inputSpace.setHorizontalAlignment(JTextField.RIGHT); //글씨체 설정 inputSpace.setFont(new Font(“Arial”, Font.BOLD, 50)); //위치와 크기(x:8,y:10의 위치에 270×70의 크기) inputSpace.setBounds(8, 10, 270, 70); //버튼을 만들 패널 JPanel buttonPanel = new JPanel(); //레이아웃 지정 – 격자형태로 배치해주는 GridLayout사용 //GridLayout(4, 4, 10, 10) -> 가로 칸수, 세로 칸수, 좌우 간격, 상하 간격 buttonPanel.setLayout(new GridLayout(4, 4, 10, 10)); //위치와 크기 설정 buttonPanel.setBounds(8, 90, 270, 235); //계산기 버튼의 글자를 차례대로 배열에 저장 String button_names[] = { “C”, “÷”, “×”, “=”, “7”, “8”, “9”, “+”, “4”, “5”, “6”, “-“, “1”, “2”, “3”, “0” }; //버튼들의 배열 JButton buttons[] = new JButton[button_names.length]; //배열을 이용하여 버튼 생성 for (int i = 0; i < button_names.length; i++) { buttons[i] = new JButton(button_names[i]); //글씨체 buttons[i].setFont(new Font("Arial", Font.BOLD, 20)); //버튼의 색 지정 if (button_names[i] == "C") buttons[i].setBackground(Color.RED); else if ((i >= 4 && i <= 6) || (i >= 8 && i <= 10) || (i >= 12 && i <= 14)) buttons[i].setBackground(Color.BLACK); else buttons[i].setBackground(Color.GRAY); //글자색 지정 buttons[i].setForeground(Color.WHITE); //테두리 없앱 buttons[i].setBorderPainted(false); //밑에서 만든 액션리스너를 버튼에 추가 buttons[i].addActionListener(new PadActionListener()); //버튼들을 버튼패널에 추가 buttonPanel.add(buttons[i]); } add(inputSpace); //버튼 패널 추가 add(buttonPanel); //창의 제목, 사이즈, 보이기 여부 등을 지정해줌 setTitle("계산기"); setVisible(true); setSize(300,370); //화면의 가운데에 띄움 setLocationRelativeTo(null); //사이즈조절 불가능 setResizable(false); //창을 닫을 때 실행 중인 프로그램도 같이 종료되도록 함 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //만들어놓은 버튼에 액션 리스너 기능 추가 //액션리스너를 상속시켜주고 actionPerformed(ActionEvent e)메소드로 이벤트 처리 class PadActionListener implements ActionListener{ public void actionPerformed(ActionEvent e) { //어떤 버튼이 눌렸는지를 알아냄 String operation = e.getActionCommand(); //C가 눌렸을 경우 위의 계산식 내용을 지워줌 if (operation.equals("C")) { inputSpace.setText(""); //=이 눌렸을 경우 위에 입력된 식을 계산, 계산값이 나오도록 함 } else if (operation.equals("=")) { //밑의 메소드들을 이용하여 계산, 계산식 화면에 값을 띄워줌 String result = Double.toString(calculate(inputSpace.getText())); inputSpace.setText("" + result); num = ""; //나버지 버튼은 눌렀을 때 계산식에 추가됨 } else { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); } } } private void fullTextParsing(String inputText) { equation.clear(); //계산식의 글자를 하나하나 거쳐감 for (int i = 0; i < inputText.length(); i++) { char ch = inputText.charAt(i); //연산기호가 나오면 ArrayList에 추가되고 초기화 if (ch == '-' || ch == '+' || ch == '×' || ch == '÷') { //연산기호를 만났다 : 앞은 숫자라는 것을 의미 //숫자를 ArrayList에 추가 equation.add(num); //num 초기화 num = ""; //연산기호를 ArrayList에 추가 equation.add(ch + ""); } else { //나머지는 그냥 숫자 처리 num = num + ch; } } //반복문 끝나고 남아있는 숫자값 추가 equation.add(num); } //계산 기능 public double calculate(String inputText) { fullTextParsing(inputText); //위의 메소드를 실행하면 ArrayList에 숫자와 연산 기호가 담김 double prev = 0; double current = 0; //연산 기호에 대한 처리를 위한 변수 String mode = ""; //+일경우 add, -일경우 sub, x일경우 mul, /일경우 div for (String s : equation) { if (s.equals("+")) { mode = "add"; } else if (s.equals("×")) { mode = "sub"; } else if (s.equals("×")) { mode = "mul"; } else if (s.equals("÷")) { mode = "div"; } else { //숫자일 경우 문자열을 Double로 형변환 current = Double.parseDouble(s); //mode값에 따라 처리, prev는 계속 계산값이 갱신됨 if (mode.equals("add")) { prev += current; } else if (mode.equals("sub")) { prev -= current; } else if (mode.equals("mul")) { prev *= current; } else if (mode.equals("div")) { prev /= current; } else { prev = current; } } } //계산값 prev 반환 return prev; } public static void main(String[] args) { new Calculator(); } } □3단계 출력 결과 3 예외사항 처리하기 위에서 언급했듯이, 이전의 코드에는 ≫ 사용자는 코드가 원하는 정상의 식을 입력하지 않았을 때(4++-5 등) 정상처리할 수 없다. ≫ 현재 코드로는 첫번째 값에 음수를 입력할 수 없다. 라는 문제가 있다. 수정된 코드에서는 위의 계산식이 비어있지 않고 연산자를 중복으로 입력하지 않을 시 에 입력할 수 있다. 첫 값이 음수 여도 입력할 수 있다. 또 소수점 제한 이 되지 않았을 때 화면 안에 다 표시가 안될 경우가 있으므로 소수점 여섯번 째 자리에서 반올림되도록 수정하였다. import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculator extends JFrame { private JTextField inputSpace; //계산식의 숫자를 담을 변수 num private String num = ""; //방금 누른 버튼을 기억하는 변수 prev_operation private String prev_operation = ""; //계산 기능을 구현하기 위해 ArrayList에 숫자와 연산 기호를 하나씩 구분해 담음 private ArrayList equation = new ArrayList(); public Calculator() { //계산기의 화면과 버튼을 붙임 – 기본 레이아웃 사용 setLayout(null); //빈공간의 JTextField 생성 inputSpace = new JTextField(); //편집가능여부 : 불가능 (버튼만 사용) inputSpace.setEditable(false); //배경색 설정 inputSpace.setBackground(Color.WHITE); //정렬위치 설정 inputSpace.setHorizontalAlignment(JTextField.RIGHT); //글씨체 설정 inputSpace.setFont(new Font(“Arial”, Font.BOLD, 50)); //위치와 크기(x:8,y:10의 위치에 270×70의 크기) inputSpace.setBounds(8, 10, 270, 70); //버튼을 만들 패널 JPanel buttonPanel = new JPanel(); //레이아웃 지정 – 격자형태로 배치해주는 GridLayout사용 //GridLayout(4, 4, 10, 10) -> 가로 칸수, 세로 칸수, 좌우 간격, 상하 간격 buttonPanel.setLayout(new GridLayout(4, 4, 10, 10)); //위치와 크기 설정 buttonPanel.setBounds(8, 90, 270, 235); //계산기 버튼의 글자를 차례대로 배열에 저장 String button_names[] = { “C”, “÷”, “×”, “=”, “7”, “8”, “9”, “+”, “4”, “5”, “6”, “-“, “1”, “2”, “3”, “0” }; //버튼들의 배열 JButton buttons[] = new JButton[button_names.length]; //배열을 이용하여 버튼 생성 for (int i = 0; i < button_names.length; i++) { buttons[i] = new JButton(button_names[i]); //글씨체 buttons[i].setFont(new Font("Arial", Font.BOLD, 20)); //버튼의 색 지정 if (button_names[i] == "C") buttons[i].setBackground(Color.RED); else if ((i >= 4 && i <= 6) || (i >= 8 && i <= 10) || (i >= 12 && i <= 14)) buttons[i].setBackground(Color.BLACK); else buttons[i].setBackground(Color.GRAY); //글자색 지정 buttons[i].setForeground(Color.WHITE); //테두리 없앱 buttons[i].setBorderPainted(false); //밑에서 만든 액션리스너를 버튼에 추가 buttons[i].addActionListener(new PadActionListener()); //버튼들을 버튼패널에 추가 buttonPanel.add(buttons[i]); } add(inputSpace); //버튼 패널 추가 add(buttonPanel); //창의 제목, 사이즈, 보이기 여부 등을 지정해줌 setTitle("계산기"); setVisible(true); setSize(300,370); //화면의 가운데에 띄움 setLocationRelativeTo(null); //사이즈조절 불가능 setResizable(false); //창을 닫을 때 실행 중인 프로그램도 같이 종료되도록 함 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //만들어놓은 버튼에 액션 리스너 기능 추가 //액션리스너를 상속시켜주고 actionPerformed(ActionEvent e)메소드로 이벤트 처리 class PadActionListener implements ActionListener{ public void actionPerformed(ActionEvent e) { //어떤 버튼이 눌렸는지를 알아냄 String operation = e.getActionCommand(); //C가 눌렸을 경우 위의 계산식 내용을 지워줌 if (operation.equals("C")) { inputSpace.setText(""); //=이 눌렸을 경우 위에 입력된 식을 계산, 계산값이 나오도록 함 } else if (operation.equals("=")) { //밑의 메소드들을 이용하여 계산, 계산식 화면에 값을 띄워줌 String result = Double.toString(calculate(inputSpace.getText())); inputSpace.setText("" + result); num = ""; //지금 누른 버튼이 연산자일 때의 조건 } else if (operation.equals("+") || operation.equals("-") || operation.equals("×") || operation.equals("÷")) { //첫 값을 음수로 입력할 수 있음 if (inputSpace.getText().equals("") && operation.equals("-")) { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); //이전에 누른 버튼이 연산자가 아니고 && 위의 계산식이 비버있지 않을 때의 조건문 } else if (!inputSpace.getText().equals("") && !prev_operation.equals("+") && !prev_operation.equals("-") && !prev_operation.equals("×") && !prev_operation.equals("÷")) { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); } } //나버지 버튼은 눌렀을 때 계산식에 추가됨 else { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); } //마지막으로 누른 버튼을 기억 prev_operation = e.getActionCommand(); } } private void fullTextParsing(String inputText) { equation.clear(); //계산식의 글자를 하나하나 거쳐감 for (int i = 0; i < inputText.length(); i++) { char ch = inputText.charAt(i); //연산기호가 나오면 ArrayList에 추가되고 초기화 if (ch == '-' || ch == '+' || ch == '×' || ch == '÷') { //연산기호를 만났다 : 앞은 숫자라는 것을 의미 //숫자를 ArrayList에 추가 equation.add(num); //num 초기화 num = ""; //연산기호를 ArrayList에 추가 equation.add(ch + ""); } else { //나머지는 그냥 숫자 처리 num = num + ch; } } //반복문 끝나고 남아있는 숫자값 추가 equation.add(num); //연산자가 있을 때 num을 ArrayList에 추가하는데, 처음에 -가 있으면 ""가 추가되어 에러가 발생함 //즉 ""을 제거 equation.remove(""); } //계산 기능 public double calculate(String inputText) { fullTextParsing(inputText); //위의 메소드를 실행하면 ArrayList에 숫자와 연산 기호가 담김 double prev = 0; double current = 0; //연산 기호에 대한 처리를 위한 변수 String mode = ""; //+일경우 add, -일경우 sub for (String s : equation) { if (s.equals("+")) { mode = "add"; } else if (s.equals("×")) { mode = "sub"; } else if (s.equals("×")) { mode = "mul"; } else if (s.equals("÷")) { mode = "div"; } else { //숫자일 경우 문자열을 Double로 형변환 current = Double.parseDouble(s); //mode값에 따라 처리, prev는 계속 계산값이 갱신됨 if (mode.equals("add")) { prev += current; } else if (mode.equals("sub")) { prev -= current; } else if (mode.equals("mul")) { prev *= current; } else if (mode.equals("div")) { prev /= current; } else { prev = current; } } //소수점 여섯번 째 자리에서 반올림 -> 화면 표시 제한이 있기때문 prev = Math.round(prev * 100000) / 100000.0; } //값 반환 return prev; } public static void main(String[] args) { new Calculator(); } }

□4단계 출력 결과

첫번째 값을 음수로 입력할 수 있다!

4 연산자 우선순위 매기기

위의 코드에서 대부분의 계산이 정상적으로 작동되지만, 곱셈과 나눗셈 / 덧셈과 뺄셈의 우선순위 차이 없이

순서대로만 계산된다.

예를 들어 6+4*2를 했을 때 14가 아닌 20이 나오는데,

곱셈연산자와 나눗셈연산자를 따로 처리하도록 수정하였다.

▼5단계를 적용한 최종 코드

최종 코드

import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculator extends JFrame { private JTextField inputSpace; //계산식의 숫자를 담을 변수 num private String num = “”; //방금 누른 버튼을 기억하는 변수 prev_operation private String prev_operation = “”; //계산 기능을 구현하기 위해 ArrayList에 숫자와 연산 기호를 하나씩 구분해 담음 private ArrayList equation = new ArrayList(); public Calculator() { //계산기의 화면과 버튼을 붙임 – 기본 레이아웃 사용 setLayout(null); //빈공간의 JTextField 생성 inputSpace = new JTextField(); //편집가능여부 : 불가능 (버튼만 사용) inputSpace.setEditable(false); //배경색 설정 inputSpace.setBackground(Color.WHITE); //정렬위치 설정 inputSpace.setHorizontalAlignment(JTextField.RIGHT); //글씨체 설정 inputSpace.setFont(new Font(“Arial”, Font.BOLD, 50)); //위치와 크기(x:8,y:10의 위치에 270×70의 크기) inputSpace.setBounds(8, 10, 270, 70); //버튼을 만들 패널 JPanel buttonPanel = new JPanel(); //레이아웃 지정 – 격자형태로 배치해주는 GridLayout사용 //GridLayout(4, 4, 10, 10) -> 가로 칸수, 세로 칸수, 좌우 간격, 상하 간격 buttonPanel.setLayout(new GridLayout(4, 4, 10, 10)); //위치와 크기 설정 buttonPanel.setBounds(8, 90, 270, 235); //계산기 버튼의 글자를 차례대로 배열에 저장 String button_names[] = { “C”, “÷”, “×”, “=”, “7”, “8”, “9”, “+”, “4”, “5”, “6”, “-“, “1”, “2”, “3”, “0” }; //버튼들의 배열 JButton buttons[] = new JButton[button_names.length]; //배열을 이용하여 버튼 생성 for (int i = 0; i < button_names.length; i++) { buttons[i] = new JButton(button_names[i]); //글씨체 buttons[i].setFont(new Font("Arial", Font.BOLD, 20)); //버튼의 색 지정 if (button_names[i] == "C") buttons[i].setBackground(Color.RED); else if ((i >= 4 && i <= 6) || (i >= 8 && i <= 10) || (i >= 12 && i <= 14)) buttons[i].setBackground(Color.BLACK); else buttons[i].setBackground(Color.GRAY); //글자색 지정 buttons[i].setForeground(Color.WHITE); //테두리 없앱 buttons[i].setBorderPainted(false); //밑에서 만든 액션리스너를 버튼에 추가 buttons[i].addActionListener(new PadActionListener()); //버튼들을 버튼패널에 추가 buttonPanel.add(buttons[i]); } add(inputSpace); //버튼 패널 추가 add(buttonPanel); //창의 제목, 사이즈, 보이기 여부 등을 지정해줌 setTitle("계산기"); setVisible(true); setSize(300,370); //화면의 가운데에 띄움 setLocationRelativeTo(null); //사이즈조절 불가능 setResizable(false); //창을 닫을 때 실행 중인 프로그램도 같이 종료되도록 함 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //만들어놓은 버튼에 액션 리스너 기능 추가 //액션리스너를 상속시켜주고 actionPerformed(ActionEvent e)메소드로 이벤트 처리 class PadActionListener implements ActionListener{ public void actionPerformed(ActionEvent e) { //어떤 버튼이 눌렸는지를 알아냄 String operation = e.getActionCommand(); //C가 눌렸을 경우 위의 계산식 내용을 지워줌 if (operation.equals("C")) { inputSpace.setText(""); //=이 눌렸을 경우 위에 입력된 식을 계산, 계산값이 나오도록 함 } else if (operation.equals("=")) { //밑의 메소드들을 이용하여 계산, 계산식 화면에 값을 띄워줌 String result = Double.toString(calculate(inputSpace.getText())); inputSpace.setText("" + result); num = ""; //지금 누른 버튼이 연산자일 때의 조건 } else if (operation.equals("+") || operation.equals("-") || operation.equals("×") || operation.equals("÷")) { //첫 값을 음수로 입력할 수 있음 if (inputSpace.getText().equals("") && operation.equals("-")) { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); //이전에 누른 버튼이 연산자가 아니고 && 위의 계산식이 비버있지 않을 때의 조건문 } else if (!inputSpace.getText().equals("") && !prev_operation.equals("+") && !prev_operation.equals("-") && !prev_operation.equals("×") && !prev_operation.equals("÷")) { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); } } //나버지 버튼은 눌렀을 때 계산식에 추가됨 else { inputSpace.setText(inputSpace.getText() + e.getActionCommand()); } //마지막으로 누른 버튼을 기억 prev_operation = e.getActionCommand(); } } private void fullTextParsing(String inputText) { equation.clear(); //계산식의 글자를 하나하나 거쳐감 for (int i = 0; i < inputText.length(); i++) { char ch = inputText.charAt(i); //연산기호가 나오면 ArrayList에 추가되고 초기화 if (ch == '-' || ch == '+' || ch == '×' || ch == '÷') { //연산기호를 만났다 : 앞은 숫자라는 것을 의미 //숫자를 ArrayList에 추가 equation.add(num); //num 초기화 num = ""; //연산기호를 ArrayList에 추가 equation.add(ch + ""); } else { //나머지는 그냥 숫자 처리 num = num + ch; } } //반복문 끝나고 남아있는 숫자값 추가 equation.add(num); //연산자가 있을 때 num을 ArrayList에 추가하는데, 처음에 -가 있으면 ""가 추가되어 에러가 발생함 //즉 ""을 제거 equation.remove(""); } //계산 기능 public double calculate(String inputText) { fullTextParsing(inputText); //위의 메소드를 실행하면 ArrayList에 숫자와 연산 기호가 담김 double prev = 0; double current = 0; //연산 기호에 대한 처리를 위한 변수 String mode = ""; //연산자 우선순위 적용 for (int i = 0; i < equation.size(); i++) { String s = equation.get(i); //연산자가 있을 때마다 mode의 값을 변경 if (s.equals("+")) { mode = "add"; } else if (s.equals("-")) { mode = "sub"; } else if (s.equals("×")) { mode = "mul"; } else if (s.equals("÷")) { mode = "div"; } else { //전에 있던 연산자가 곱셈 혹은 나눗셈이고 현재 인덱스의 값이 숫자일 때 연산 진행 if ((mode.equals("mul") || mode.equals("div")) && !s.equals("+") && !s.equals("-") && !s.equals("×") && !s.equals("÷")) { Double one = Double.parseDouble(equation.get(i - 2)); Double two = Double.parseDouble(equation.get(i)); Double result = 0.0; //mode에 따라서 계산 if (mode.equals("mul")) { result = one * two; } else if (mode.equals("div")) { result = one / two; } //result값을 ArrayList에 추가 equation.add(i + 1, Double.toString(result)); for (int j = 0; j < 3; j++) { equation.remove(i - 2); } //예를 들어 3 + 5 x 6에서 3 + 30이 되었으므로 인덱스를 2만큼 되돌아감 i -= 2; // 결과값이 생긴 인덱스로 이동 } } } // 곱셈 나눗셈을 먼저 계산한다 //+일경우 add, -일경우 sub for (String s : equation) { if (s.equals("+")) { mode = "add"; } else if (s.equals("-")) { mode = "sub"; //곱셈, 나눗셈 연산 삭제됨 } else { //숫자일 경우 문자열을 Double로 형변환 current = Double.parseDouble(s); //mode값에 따라 처리, prev는 계속 계산값이 갱신됨 if (mode.equals("add")) { prev += current; } else if (mode.equals("sub")) { prev -= current; } else { prev = current; } } //소수점 여섯번 째 자리에서 반올림 -> 화면 표시 제한이 있기때문 prev = Math.round(prev * 100000) / 100000.0; } //값 반환 return prev; } public static void main(String[] args) { new Calculator(); } }

자바) if , else 문을 사용해서 계산기 프로그램 만들기 실시

728×90

반응형

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Eclipse

개발 언어 : Java

/* =========================== */

/* =========================== */

[소스 코드]

package ex5; import java.util.Scanner; public class MainActivity11 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(“[if , else 문을 사용해서 계산기 프로그램 만들기 실시]”); /*[설 명] * 1. scanner : 사용자로부터 키보드 입력을 받습니다 * 2. equals : 사용자가 입력한 부호값이 +,-,*,/ 와 같은지 확인합니다 * */ //첫번째와 두번째 정수 값을 담을 변수 선언 int one = 0; int two = 0; //사칙연산 부호를 담을 변수 선언 실시 String sign = “”; //사용자로부터 키보드 입력을 받기 위한 scanner 객체 선언 실시 Scanner scan = new Scanner(System.in); //사용자로부터 정수값과 연산자 부호값을 입력받습니다 System.out.print(“첫번째 값 : “); one = scan.nextInt(); System.out.print(“두번째 값 : “); two = scan.nextInt(); System.out.print(“사칙연산부호 (+,-,*,/) : “); sign = scan.next(); //if 문을 사용해서 사용자가 입력한 사칙연산 부호에 맞게 연산 수행 실시 if(sign.equals(“+”)) { System.out.println(one+”+”+two+”=”+(one+two)); } else if(sign.equals(“-“)) { System.out.println(one+”-“+two+”=”+(one-two)); } else if(sign.equals(“*”)) { System.out.println(one+”*”+two+”=”+(one*two)); } else if(sign.equals(“/”)) { System.out.println(one+”/”+two+”=”+(one/two)); } else { System.out.println(“알수없는 연산자입니다 … “); } }//메인 종료 }//클래스 종료

/* =========================== */

[결과 출력]

[if , else 문을 사용해서 계산기 프로그램 만들기 실시]

첫번째 값 : 10

두번째 값 : 20

사칙연산부호 (+,-,*,/) : +

10+20=30

/* =========================== */

/* =========================== */

[요약 설명]

* 1. scanner : 사용자로부터 키보드 입력을 받습니다

* 2. equals : 사용자가 입력한 부호값이 +,-,*,/ 와 같은지 확인합니다

/* =========================== */

728×90

반응형

[Java] GUI 계산기 만들기(1)

계산기 완성

5/19~5/21 계산기 만들기

다음에는 키보드 입력 기능을 넣어보도록 하자…

소스코드

CarlcFrame.java

package calculator; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.GridLayout; import java.awt.Font; import java.awt.Font; import java.awt.Color; import java.awt.BorderLayout; public class CalcFrame extends JFrame implements ActionListener { JLabel label; // 연산 결과창 boolean state = false; // 화면에 표시된 number 핸들러 double num1, num2; double result; // 연산 결과 String func = “”; // 기능 연산자 String nInput = “”; // 마지막에 누른 연산자 저장 String btn[] = { “←”, “C”, “%”, “x²”, “7”, “8”, “9”, “÷”, “4”, “5”, “6”, “×”, “1”, “2”, “3”, “-“, “.”, “0”, “=”, “+” }; // 버튼 안에 값 배열 public CalcFrame() { super(“Calculator”); // title 지정 super.setResizable(true); // 프레임의 크기를 사용자가 조절 /* * JFrame : 메인 프레임 JPanel : 보조 프레임 JLabel : 기능을 수행하는 컴포넌트 */ // 결과 창 GUI label = new JLabel(“0”, JLabel.RIGHT); // (“첫화면 출력될 값”, 위치) JPanel mainView = new JPanel(); label.setFont(new Font(“Serif”, Font.BOLD, 50)); // Font 지정 label.setBackground(Color.WHITE); // 결과창 배경색 지정 label.setOpaque(true); // 배경색을 적용하기 위해 불투명 설정 // 버튼 창 GUI JPanel btnView = new JPanel(); btnView.setLayout(new GridLayout(5, 4, 2, 2)); // 행과 열로 구성된 레이아웃 설정 (row, cols, 간격, 간격) JButton button[] = new JButton[btn.length]; // 버튼 생성, 배열의 길이만큼 값을 가져옴 for (int i = 0; i < btn.length; i++) { button[i] = new JButton(btn[i]); button[i].setFont(new Font("Serif", Font.BOLD, 25)); // Font 지정 button[i].addActionListener(this); // 익명클래스로 버튼 이벤트 추가 ,이벤트 리스너의 객체이므로 this로 지정 if (i == 0 || i == 1 || i == 18) button[i].setForeground(Color.RED); // 기능별 색 지정 if (i == 2 || i == 3 || i == 7 || i == 11 || i == 15 || i == 19) button[i].setForeground(Color.BLUE); btnView.add(button[i]); } // 프레임 배치 및 설정 mainView.setLayout(new BorderLayout()); // 동서남북 레이아웃 배치 add(label, BorderLayout.CENTER); // 결과창 배치 add(btnView, BorderLayout.SOUTH); // 버튼창 베치 setBounds(100, 100, 300, 400); // 프레임의 크기 지정 setDefaultCloseOperation(EXIT_ON_CLOSE); // X버튼을 누르면 닫히는 설정 setVisible(true); // 프레임이 보이도록 설정 } // 마우스 클릭에 의한 동작 @Override public void actionPerformed(ActionEvent e) { String input = e.getActionCommand(); // 이벤트를 발생시킨 객체의 문자열을 가져와서 input에 넣음 if (input.equals("+")) { num1 = num2; func = "+"; nInput = ""; // 마지막에 누른 연산자 저장 } else if (input.equals("-")) { num1 = num2; func = "-"; nInput = ""; } else if (input.equals("×")) { num1 = num2; func = "×"; nInput = ""; } else if (input.equals("÷")) { num1 = num2; func = "÷"; nInput = ""; } else if (input.equals("%")) { num1 = num2; func = "%"; nInput = ""; result = num1 / 100; label.setText(String.valueOf(result)); //결과값을 문자열로 반환하여 결과창에 출력 } else if (input.equals("x²")) { num1 = num2; func = "x²"; nInput = ""; result = num1 * num1; label.setText(String.valueOf(result)); state = true; } else if (input.equals("C")) { // Clear nInput = ""; num2 = 0; num1 = 0; label.setText("0"); // substring(start, end) - start부터 end 전까지 문자열 자르기 } else if (input.equals("←")) { // 왼쪽부터 순차적으로 지워지도록 함 setBackSpace(getBackSpace().substring(0, getBackSpace().length() - 1)); if (getBackSpace().length() < 1) { // 더 이상 지울 숫자가 없으면, 0으로 clear nInput = ""; num2 = 0; num1 = 0; label.setText("0"); } } else if (input.equals("=")) { if (func.equals("+")) { result = num1 + num2; label.setText(String.valueOf(result)); //결과값을 문자열로 반환하여 결과창에 출력 state = true; // 결과 값이 나온 후 다음 입력이 들어왔을 때 화면에 표시된 결과 값을 지운다. } else if (func.equals("-")) { result = num1 - num2; label.setText(String.valueOf(result)); state = true; } else if (func.equals("×")) { result = num1 * num2; label.setText(String.valueOf(result)); state = true; } else if (func.equals("÷")) { result = num1 / num2; label.setText(String.valueOf(result)); state = true; } } else { if (state) { label.setText("0"); state = false; num1 = 0; num2 = 0; nInput = ""; } nInput += e.getActionCommand(); label.setText(nInput); num2 = Double.parseDouble(nInput); //문자열에서 double형 변 } } private void setBackSpace(String bs) { label.setText(bs); } private String getBackSpace() { return label.getText(); } } Carculator.java package calculator; public static void main(String[] args) { new CalcFrame(); } }

java 사칙연산을 할수있는 간단한 계산기 만들기 day3 과 연관

728×90

import java.util.Scanner; public class Test { public static void main(String[] args) { /**계산기**/ Scanner scan = new Scanner(System.in); System.out.println(“첫번째 숫자를 입력하세요”); String str1 = scan.nextLine(); System.out.println(“사칙연산 기호중 하나를 입력하세요”); String op = scan.nextLine(); System.out.println(“두번째 숫자를 입력하세요”); String str2 = scan.nextLine(); int num1 = Integer.parseInt(str1); int num2 = Integer.parseInt(str2); int num3; if(op.equals(“+”)) { num3 = num1 + num2; } else if(op.equals(“-“)) { num3 = num1 – num2; } else if(op.equals(“/”)) { num3 = num1 / num2; } else{ num3 = num1 * num2; } System.out.println(str1 + op + str2 + “=” + num3); } }

[JAVA] 계산기 프로그램 프로젝트

3. 계산기 프로그램 기능 구현II

1) 계산기 프로그램 개발 환경

구분 내용 사용 프로그래밍 언어 JAVA 개발환경 eclipse GUI 관련 주요 클래스 SWING,AWT 기능 관련 주요 인터페이스 ActionListener, KeyListener 벤치마킹 프로그램 Windows 계산기

2) 개발 소스

package calculator; // GUI 구현을 위해 사용하는 클래스들(awt, swing) import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Calculator extends JFrame implements ActionListener, KeyListener{ private JPanel p_all, p_cal, p_cont; // 객체 선언 private JButton rem, ce, c, b_space, frac, squa, root, div, seven, eight, nine, mul, four, five, six, minus, one, two, three, plus, sign, zero, point, equal;// 버튼 선언 private JLabel process, result; // 레이블 선언 final int MAX_INPUT_LENGTH = 20; //최대한 입력 가능한 길이를 제한 //각 모드별로 index를 부여 final int INPUT_MODE = 0; final int RESULT_MODE = 1; final int ERROR_MODE = 2; int displayMode; boolean clearOnNextDigit; //화면에 표시될 숫자를 지울지 말지 결정하는 변수 double lastNumber = 0; //마지막에 기억될 수 String lastOperator = “0”; // 마지막에 누른 연산자를 기억. public Calculator(String title) { // 기본 프로그램 설정(제목, 크기, 위치) this.setTitle(title); this.setSize(350, 450); this.setLocation(800, 280); //종료(EXIT_ON_CLOSE를 사용, 없으면 작업 프로세스에 남아서 메모리만 차지함.) setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* 1. 배치 관리자 종류 * 1) FlowLayout : 왼쪽에서 오른쪽으로 배치, 오른쪽 공간 없으면 아래로 자동 배치 * – 사용 예제 : FlowLatout(FlowLayout.LEFT, 10, 20); // 왼쪽 정렬, 좌우간격 10, 상하간격 20 * 2) BorderLayout : 상하좌우 + 중앙 5개의 영역으로 나눠 배치 * – 사용 예제 : BorderLayout(30,20); //좌우간격 30, 상하간격 20 * 3) GridLayout : 2차원 그리드로서 n x n 으로 설정, 왼->오, 위->아래 순 배치 * – 사용 예제 : GridLayout(4,3,5,50); // 4 x 3 그리드, 좌우간격 5, 상하간격 50 * 4) CardLayout : 컴포넌트를 포개어 배치 * 5) Null : 레이아웃을 쓰지 않고 각 컴포넌트마다 수동으로 위치 설정해줄 때 사용 */ //Panel 객체 생성 p_all = new JPanel(); p_cal = new JPanel(); p_cont = new JPanel(); //폰트 생성 Font bold = new Font(“맑은 고딕”, Font.BOLD, 24); Font cal_bold = new Font(“맑은 고딕”, Font.BOLD, 18); //색깔 생성 Color gray = new Color(204,204,204); Color white = new Color(255,255,255); Color light_blue = new Color(153,153,255); //p_all(전체적인 레이아웃) 설정 this.add(p_all); p_all.setLayout(new FlowLayout()); //p_cal 레이아웃 p_cal.setLayout(new GridLayout(2,1)); p_cal.setPreferredSize(new Dimension(290,80)); // 레이아웃 크기 설정 process = new JLabel(“”,JLabel.RIGHT); result = new JLabel(“0”,JLabel.RIGHT); p_cal.add(process); p_cal.add(result); //p_cal 레이블 정렬 process.setAlignmentX(RIGHT_ALIGNMENT); result.setAlignmentX(RIGHT_ALIGNMENT); //p_cal 폰트 적용 result.setFont(bold); //p_cal 색상 적용 process.setForeground(Color.gray); //p_cont 레이아웃 p_cont.setLayout(new GridLayout(6,4)); p_cont.setPreferredSize(new Dimension(290,300)); //p_cont 1번줄 rem = new JButton(“%”); rem.addActionListener(this); // 마우스 이벤트에 사용하기 위한 작업 rem.addKeyListener(this); // 키보드 이벤트에 사용하기 위한 작업 p_cont.add(rem); ce = new JButton(“CE”); ce.addActionListener(this); ce.addKeyListener(this); p_cont.add(ce); c = new JButton(“C”); c.addActionListener(this); c.addKeyListener(this); p_cont.add(c); b_space = new JButton(“←”); b_space.addActionListener(this); b_space.addKeyListener(this); p_cont.add(b_space); //p_cont 2번줄 frac = new JButton(“¹/x”); frac.addActionListener(this); frac.addKeyListener(this); p_cont.add(frac); squa = new JButton(“x²”); squa.addActionListener(this); squa.addKeyListener(this); p_cont.add(squa); root = new JButton(“²√x”); root.addActionListener(this); root.addKeyListener(this); p_cont.add(root); div = new JButton(“÷”); div.addActionListener(this); div.addKeyListener(this); p_cont.add(div); //p_cont 3번줄 seven = new JButton(“7”); seven.addActionListener(this); seven.addKeyListener(this); p_cont.add(seven); eight = new JButton(“8”); eight.addActionListener(this); eight.addKeyListener(this); p_cont.add(eight); nine = new JButton(“9”); nine.addActionListener(this); nine.addKeyListener(this); p_cont.add(nine); mul = new JButton(“×”); mul.addActionListener(this); mul.addKeyListener(this); p_cont.add(mul); //p_cont 4번줄 four = new JButton(“4”); four.addActionListener(this); four.addKeyListener(this); p_cont.add(four); five = new JButton(“5”); five.addActionListener(this); five.addKeyListener(this); p_cont.add(five); six = new JButton(“6”); six.addActionListener(this); six.addKeyListener(this); p_cont.add(six); minus = new JButton(“-“); minus.addActionListener(this); minus.addKeyListener(this); p_cont.add(minus); //p_cont 5번줄 one = new JButton(“1”); one.addActionListener(this); one.addKeyListener(this); p_cont.add(one); two = new JButton(“2”); two.addActionListener(this); two.addKeyListener(this); p_cont.add(two); three = new JButton(“3”); three.addActionListener(this); three.addKeyListener(this); p_cont.add(three); plus = new JButton(“+”); plus.addActionListener(this); plus.addKeyListener(this); p_cont.add(plus); //p_cont 6번줄 sign = new JButton(“±”); sign.addActionListener(this); sign.addKeyListener(this); p_cont.add(sign); zero = new JButton(“0”); zero.addActionListener(this); zero.addKeyListener(this); p_cont.add(zero); point = new JButton(“.”); point.addActionListener(this); point.addKeyListener(this); p_cont.add(point); equal = new JButton(“=”); equal.addActionListener(this); equal.addKeyListener(this); p_cont.add(equal); //p_cont 폰트 사이즈 설정 zero.setFont(bold); one.setFont(bold); two.setFont(bold); three.setFont(bold); four.setFont(bold); five.setFont(bold); six.setFont(bold); seven.setFont(bold); eight.setFont(bold); nine.setFont(bold); rem.setFont(cal_bold); ce.setFont(cal_bold); c.setFont(cal_bold); b_space.setFont(cal_bold); frac.setFont(cal_bold); squa.setFont(cal_bold); root.setFont(cal_bold); div.setFont(cal_bold); mul.setFont(cal_bold); minus.setFont(cal_bold); plus.setFont(cal_bold); sign.setFont(cal_bold); point.setFont(cal_bold); equal.setFont(cal_bold); //p_cont 버튼 배경색 설정 rem.setBackground(gray); ce.setBackground(gray); c.setBackground(gray); b_space.setBackground(gray); frac.setBackground(gray); squa.setBackground(gray); root.setBackground(gray); div.setBackground(gray); mul.setBackground(gray); minus.setBackground(gray); plus.setBackground(gray); sign.setBackground(gray); point.setBackground(gray); equal.setBackground(light_blue); zero.setBackground(white); one.setBackground(white); two.setBackground(white); three.setBackground(white); four.setBackground(white); five.setBackground(white); six.setBackground(white); seven.setBackground(white); eight.setBackground(white); nine.setBackground(white); //내부 레이아웃(계산 레이블, 키 버튼) -> 전체 레이아웃에 추가 p_all.add(p_cal); p_all.add(p_cont); //창 보이기 설정(true : 보임 , false 안보임) setVisible(true); } public static void main(String[] args) { // Corine의 계산기 실행 new Calculator(“계산기”); } // 마우스 입력에 의한 동작 public void actionPerformed(ActionEvent e) { double result = 0; // 숫자 1 클릭 if(e.getSource() == one) addToDisplay(1); // 숫자 2 클릭 else if(e.getSource() == two) addToDisplay(2); // 숫자 3 클릭 else if(e.getSource() == three) addToDisplay(3); // 숫자 4 클릭 else if(e.getSource() == four) addToDisplay(4); // 숫자 5 클릭 else if(e.getSource() == five) addToDisplay(5); // 숫자 6 클릭 else if(e.getSource() == six) addToDisplay(6); // 숫자 7 클릭 else if(e.getSource() == seven) addToDisplay(7); // 숫자 8 클릭 else if(e.getSource() == eight) addToDisplay(8); // 숫자 9 클릭 else if(e.getSource() == nine) addToDisplay(9); // 숫자 0 클릭 else if(e.getSource() == zero) addToDisplay(0); // ± 클릭 else if(e.getSource() == sign) processSingChange(); // . 클릭 else if(e.getSource() == point) addPoint(); // = 클릭 else if(e.getSource() == equal) processEquals(); // ÷ 클릭 else if(e.getSource() == div) processOperator(“/”); // × 클릭 else if(e.getSource() == mul) processOperator(“*”); // – 클릭 else if(e.getSource() == minus) processOperator(“-“); // + 클릭 else if(e.getSource() == plus) processOperator(“+”); // % 클릭 else if(e.getSource() == rem) processOperator(“%”); // √ 클릭 else if(e.getSource() == root) { // 출력 모드 : 에러가 아닌 경우 if (displayMode != ERROR_MODE) { try{ // result 레이블 첫 글자가 -인 경우 if (getDisplayString().indexOf(“-“) == 0) displayError(“함수에 대한 잘못된 입력!”); // result 레이블에서 반환한 값 제곱근하여 결과값 저장 result = Math.sqrt(getNumberInDisplay()); displayResult(result); // 제곱근한 결과값 출력 } catch(Exception ex) // 에러 처리 { displayError(“함수에 대한 잘못된 입력!”); displayMode = ERROR_MODE; // 출력모드 : 에러 저장 } } // ¹/x 클릭 } else if(e.getSource() == frac) { // 출력 모드 : 에러가 아닌 경우 if (displayMode != ERROR_MODE){ try{ // result 레이블에 있는 수가 0인 경우 if (getNumberInDisplay() == 0) displayError(“영으로 나눌 수 없습니다.”); result = 1 / getNumberInDisplay(); // 1/x 계산후 계산 값 저장 displayResult(result); // 1/x 계산값 출력 } catch(Exception ex) { // 에러 처리 displayError(“영으로 나눌 수 없습니다.”); displayMode = ERROR_MODE; // 출력모드 : 에러 저장 } } // ← 클릭 } else if(e.getSource() == b_space) backspace(); // CE 클릭 else if(e.getSource() == ce) { setDisplayString(“0″); // result 레이블 0 초기화 clearOnNextDigit = true; // 숫자 지우기 ON displayMode = INPUT_MODE; // 출력 모드 : 입력 저장 // C 클릭 } else if(e.getSource() == c) clearAll(); } //키보드 입력에 대한 동작 public void keyPressed(KeyEvent e){ int keycode = e.getKeyChar(); //System.out.println(e.getKeyCode()+ ” “+ keycode ); switch(keycode){ case KeyEvent.VK_0: addToDisplay(0); break; case KeyEvent.VK_1: addToDisplay(1); break; case KeyEvent.VK_2: addToDisplay(2); break; case KeyEvent.VK_3: addToDisplay(3); break; case KeyEvent.VK_4: addToDisplay(4); break; case KeyEvent.VK_5: addToDisplay(5); break; case KeyEvent.VK_6: addToDisplay(6); break; case KeyEvent.VK_7: addToDisplay(7); break; case KeyEvent.VK_8: addToDisplay(8); break; case KeyEvent.VK_9: addToDisplay(9); break; case 46: // . addPoint(); break; case 10: // = processEquals(); break; case 47: // / processOperator(“/”); break; case 42: // * processOperator(“*”); break; case 43: // + processOperator(“+”); break; case 45: // – processOperator(“-“); break; case 8: //backspace backspace(); break; case 27: //ESC clearAll(); break; } } public void keyReleased(KeyEvent arg0) {} public void keyTyped(KeyEvent arg0) {} // C 처리 private void clearAll() { setDisplayString(“0”); // result 문자열 0으로 초기화 lastOperator = “0”; // 마지막 연산 초기화 lastNumber = 0; // 마지막 숫자 0 초기화 displayMode = INPUT_MODE; // 출력 모드 : 입력 저장 clearOnNextDigit = true; // 숫자 지우기 ON } // ← 처리 private void backspace(){ // 출력 모드 : 에러가 아닌 경우 if (displayMode != ERROR_MODE){ // result 문자열 마지막 글자 빼고 출력 setDisplayString(getDisplayString().substring(0,getDisplayString().length() – 1)); // result 문자열 길이가 1 미만인 경우 무조건 0 출력 if (getDisplayString().length() < 1) setDisplayString("0"); } } // 연산 처리(+,-,×,÷,%) private void processOperator(String string) { // 출력 모드 : 에러가 아닌 경우 if (displayMode != ERROR_MODE){ double numberInDisplay = getNumberInDisplay(); // result 출력된 숫자 저장 // 마지막 연산자가 0이 아닌 경우 if (!lastOperator.equals("0")){ try { double result = processLastOperator(); // 연산 후 반환한 최종 계산값 저장 displayResult(result); // result 레이블에 최종 계산값 출력 lastNumber = result; // 최종 계산값을 마지막 수로 저장 }catch(Exception e){ e.getStackTrace(); // 예외 발생 시 처리 } // 마지막 연산자가 0인 경우 }else{ // result 출력된 숫자를 마지막 기억된 수에 저장 lastNumber = numberInDisplay; } clearOnNextDigit = true; // 숫자 지우기 ON lastOperator = string; // 연산자를 마지막 연산자로 저장 } } // 마지막 연산 처리(에러 발생 시 이 메소드를 사용한 메소드에서 처리) private double processLastOperator() throws Exception{ double result = 0; // 최종 계산 값을 담을 변수 double numberInDisplay = getNumberInDisplay(); // result 출력된 숫자 저장(두번째 피연산자) // 마지막 연산자가 ÷인 경우 if (lastOperator.equals("/")){ // result 출력된 숫자가 0인 경우 예외 처리 if (numberInDisplay == 0) throw (new Exception()); result = lastNumber / numberInDisplay; // 나눗셈한 결과 값 저장 } // 마지막 연산자가 ×인 경우 if (lastOperator.equals("*")){ result = lastNumber * numberInDisplay; // 곱셈 후 몫 결과 값 저장 } // 마지막 연산자가 -인 경우 if (lastOperator.equals("-")){ result = lastNumber - numberInDisplay; // 뺄셈한 결과 값 저장 } // 마지막 연산자가 +인 경우 if (lastOperator.equals("+")){ result = lastNumber + numberInDisplay; // 덧셈한 결과 값 저장 } // 마지막 연산자가 %인 경우 if (lastOperator.equals("%")){ result = lastNumber % numberInDisplay; // 곱셈 후 나머지 결과 값 저장 } return result; // 결과 값 반환 } // = 처리 private void processEquals() { double result = 0; // 출력 모드 : 에러가 아닌 경우 if (displayMode != ERROR_MODE){ try{ result = processLastOperator(); // 연산 후 반환한 최종 계산값 저장 displayResult(result); // result 레이블에 최종 계산값 출력 }catch (Exception e){ displayError("영으로 나눌 수 없습니다."); // 에러 처리 } lastOperator = "0"; // 계산 처리 후 마지막 연산자 초기화 } } // 소수점 처리 private void addPoint() { displayMode = INPUT_MODE; // 출력모드 : 입력 저장 // 지워야 하는 숫자인 경우 if (clearOnNextDigit) setDisplayString(""); // result 레이블 문자열 초기화 // 기존 화면에 있는 문자열 저장 String inputString = getDisplayString(); // 이미 점이 찍힌 경우 반복해서 찍지 않음. if (inputString.indexOf(".") < 0) setDisplayString(new String(inputString + ".")); } // ± 처리 private void processSingChange() { // 출력모드 : 입력인 경우 if (displayMode == INPUT_MODE){ String input = getDisplayString(); // 기존 화면에 있는 문자열 저장 // 기존 화면에 있는 문자열의 길이가 0보다 크고 0이 아닌 경우 if (input.length() > 0 && !input.equals(“0”)){ if (input.indexOf(“-“) == 0) // 기존 화면에 있는 문자열 첫번째 문자가 -인 경우 setDisplayString(input.substring(1)); // 첫번째 문자 – 빼고 출력 else // 기존 화면에 있는 문자열 첫번째 문자가 +인 경우 setDisplayString(“-” + input); // 문자열 첫번째 문자에 – 추가 } // 출력모드 : 결과인 경우(계산이 끝난 상태) }else if (displayMode == RESULT_MODE){ double numberInDisplay = getNumberInDisplay(); // result 출력된 숫자 저장 // result 출력된 문자열이 0이 아닌경우 if (numberInDisplay != 0) displayResult(-numberInDisplay); // 기존 값 부호 변경 } } // result 부호 변경 메소드 private void displayResult(double result) { setDisplayString(Double.toString(result)); // result 숫자 -> 문자열 형으로 변환하여 result 레이블 위에 출력 lastNumber = result; // result를 마지막 숫자로 저장 displayMode = RESULT_MODE; // 출력모드 : 결과 clearOnNextDigit = true; // 숫자 지우기 ON } // 에러 출력 메소드 private void displayError(String error) { setDisplayString(error); // result 에러 출력 lastNumber = 0; // 마지막 수 0 초기화 displayMode = ERROR_MODE; // 출력모드 : 오류 clearOnNextDigit = true; // 숫자 지우기 ON } // result 레이블에 출력된 숫자 형변환하여 가져오기 private double getNumberInDisplay() { String input = result.getText(); // result의 문자열 저장 return Double.parseDouble(input); // result의 문자열을 Double형으로 형변환 후 반환 } // 화면에 추가하는 메소드 private void addToDisplay(int i) { // 지워야 하는 숫자인 경우 if (clearOnNextDigit) // result 레이블 문자열 초기화 setDisplayString(“”); // 기존 화면에 있는 문자열 저장 String inputString = getDisplayString(); // result 레이블에 있는 문자열 첫 글자가 0인 경우 0삭제 if(inputString.indexOf(“0”) == 0){ inputString = inputString.substring(1); } // result 레이블에 있는 문자열이 0이 아니거나 입력받은 숫자가 0보다 크고 // result 문자열 길이가 최대길이(20) 미만인 경우 if((!inputString.equals(“0”) || i>0 ) && inputString.length() < MAX_INPUT_LENGTH){ // result 레이블 + 입력받은 숫자 setDisplayString(inputString + i); } displayMode = INPUT_MODE; // 출력모드 : 입력 clearOnNextDigit = false; // 숫자 지우기 OFF } //result 레이블에 문자열 넣어주는 메소드 private void setDisplayString(String string) { result.setText(string); } //result 레이블에 있는 문자열 가져오는 메소드 private String getDisplayString() { return result.getText(); } } Calculator.java 0.02MB 3) 계산기 UI <실행 결과>

4) 수정 및 개선 사항

– 기호 폰트 크기 확대(18pt)

– 로직 대폭 수정

( 7)의 자료를 참고)

– 연산 처리 과정 출력 삭제

5) 추가 보완 예정

[기능 부분]

– 숫자 하나만 넣고 = 누를 시 0으로 초기화 되는 버그 수정

– 소수점 연산 시 첫번째 숫자가 0인 경우 0이 사라지는 버그 수정

– 연산 처리 과정 출력 추가

– 연산자 키보드 대응 키 생성 및 단축키 표시

(현재 사칙연산, 전체삭제, ← 만 가능)

– 제작 정보 탭으로 만들어 보기

– 패드 클릭 시 소리 나오게 하기

– 실행 파일 만들기

[UI 부분]

– 키패드 벌려놓기(여백칸 없애기)

– 키패드 모양 다른 모양으로 해보기(ex. 원, 삼각형 등)

– 키패드 폰트 넣어보기

– 키패드 배경색 그라데이션으로 하기

6) Review

– 아직 조금 기능적으로 부실한 부분이 있지만 확실히 어제보다는 많이 깔끔해졌다. 좋은 예제를 사용하여 쓰면 쓸수록 프로그램 질이 좋아진다는 것을 느꼈다. 정말 아래 참고했던 자료가 없었으면 아직도 해매고 있을 것 같다. 자료를 참고하면서 생각치도 못한 키보드 부분도 함께 사용하게 되었다. 참고 자료와 비교하면 90% 똑같다. 다른 부분은 참고 자료에 없는 기능들(x², %)이나 내 소스에 적용하기 위해 바꾼 변수들 뿐이다. 아직 혼자서 계산기 프로그램을 만들기에는 역부족인 것을 인정하고 그 만큼 소스 분석에 노력을 기울였다. 오늘은 COPY 작업 및 분석만 했고 다음에는 작은 버그들을 고치는 것을 최우선으로 두고 이후에 기능을 조금 추가하고 계산기 프로그램을 끝마쳐야 겠다.

7) 기능 구현 참고 자료

– https://kkoseul.tistory.com/149

[ JAVA/ GUI ] 계산기만들기2/ 이벤트/ 이벤트처리/ 자바이벤트/ Event/ JavaEvent/ 자바event/ 자바계산기/ 계산기/ 자바로계산기만들기/ 자바GUI계산기/ GUI계산기/ 자바GUI/ javaGUI/ JavaGUI/ JAVA/ java/ 자바/ ..

계산기 만들기를 이어서 해보겠다.

이전 포스팅에서 GUI형태의 계산기 모양을 만들었으니

이벤트처리 해서 만든 계산기를 작동시켜 보겠다.

00_1. ActionListener를 확장시켜 사용한다.

00_2. Debug버튼을 눌렀을 때 작동 시킬 것이므로 다음과같이 버튼에 연결시켜준다.

00_3. 마우스오른쪽버튼’-> ‘Source’-> ‘Override and Implement Methods’ 로 actionPerformed메소드를 오버라이드 시킨다.

01_1. 안에다 코딩을 해서 먼저 버튼을 눌렀을때 텍스트를 바꿔주도록 해보자.

01_2. 바꿔지는 것을 확인할 수 있다.

02_1. 버튼을 누를때마다 바뀌도록 해보자. 객체를 비교할때는 ‘void equals();’ 임을 기억하자.

02_2. 계속 바뀌는 것을 확인할 수 있다.

03_1. 응용해서 버튼을 누르면 1로 바뀌게 해보자. 실제로는 button1에 연결시켜서 사용하자.

03_2. 1이 입력됨을 확인할 수 있다.

03_3. 계속 누르면 1이 계속 쓰여짐을 확인할 수 있다.

※. 코드

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 { // components는 전부 밖에서 선언해줘야 안에서 사용할 수 있으므로 좋음.

JPanel displayPanel;

JPanel buttonPanel;

JPanel debugPanel;

JTextField display;

JButton[] buttons; // 0 ~ 9 까지 10개의 버튼을 배열로 써서 만들거임.

JButton btnPlus;

JButton btnMinus;

JButton btnProduct; // Multiply

JButton btnDivide;

JButton btnEqual;

JButton btnCE;

JButton btnDebug;

JLabel debugMsg;

public MyFrame()

{

this.setSize(300,400);

this.setTitle(“GUI Test”);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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());

/* display 관련 */

// display 에 있는 panel에 component를 만들어서 붙이겠다.

display = new JTextField(11); // 글자수가 ’11자’가 들어가게 하겠다.

display.setText(“0”); // 초기 계산기 화면을 0으로 써놓겠다.

display.setHorizontalAlignment(JTextField.RIGHT); // field 내 글씨를 오른쪽정렬.

Font font = new Font(“Serif”, Font.BOLD, 30); // ※ Serif ; 삐침이 나와있는 글씨체. san serif ; non 삐침.

display.setFont(font);

// displayPanel 에다가 display component를 붙인다.

displayPanel.add(display);

/* 버튼 관련 */

Font fontBtn = new Font(“Serif”, Font.BOLD, 30); // 버튼에도 폰트를 주고싶어서 객체생성.

// buttonPanel 에 component 만들고 붙이기.

buttons = new JButton[10]; // array 메모리만 만들어진것이다.

// 실제 버튼 객체 생성하기.

for (int i = 0 ; i < buttons.length ; i++) { //buttons[i] = new JButton(""+i); // i 를 String 값으로 받고싶다. buttons[i] = new JButton(Integer.toString(i)); // i 를 String 값으로 받고싶다. buttons[i].setFont(fontBtn); // 버튼의 폰트에 대한 지정 } btnPlus = new JButton("+"); btnMinus = new JButton("-"); btnProduct = new JButton("*"); btnDivide = new JButton("/"); btnEqual = new JButton("="); btnCE = new JButton("CE"); // 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(btnEqual); buttonPanel.add(btnCE); //debugPanel 에 debugMsg 와 btnDebug 를 만들어서 붙이겠다. debugMsg = new JLabel("Start Debug"); debugMsg.setToolTipText("Hello World"); // 마우스를 debugMsg 위에 올려놓으면 Text 가 말풍선 형태로 출력. btnDebug = new JButton("Debug Button"); btnDebug.addActionListener(this); // 리스너를 이벤트소스에 등록한다. (항상 이 형식으로 사용하면 된다.) debugPanel.add(debugMsg); debugPanel.add(btnDebug); //btnDebug.setEnabled(false); // frame에다가 panel들 붙이기. this.add(displayPanel, BorderLayout.NORTH); this.add(buttonPanel, BorderLayout.CENTER); this.add(debugPanel, BorderLayout.SOUTH); //debugPanel.setVisible(false); String msg = debugMsg.getText(); System.out.println(msg); //this.pack(); this.setVisible(true); }// MyFrame Method @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == btnDebug) { //System.out.println("btnDebug is Clicked.!"); //debugMsg.setText("Hello World."); if(debugMsg.getText().equals("Start Debug")) // 객체들의 비교는 == 가 아니라 .equal 객체(String)와 객체를 비교할때. { debugMsg.setText("Hello World."); }else{ debugMsg.setText("Start Debug"); } } //1번 버튼이라고 가정하고 0을 1로 바꿔보자.(display 값이 0이기 때문에) // 현재 display 값이 '0'이면 // display.setText("1") // else // 현재 디스플레이값 display.getText() + "1" if (display.getText().equals("0")) { display.setText("1"); }else { display.setText( display.getText() + "1"); } } }// MyFrame Class public class Test { public static void main(String[] args) { MyFrame frame = new MyFrame(); }// main }// Main Class

키워드에 대한 정보 자바 계산기

다음은 Bing에서 자바 계산기 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 자바(Java)로 계산기 만들기 (1.모양 구현)

  • 자바
  • JAVA
  • 계산기
  • 프로그래밍
  • 코딩

자바(Java)로 #계산기 #만들기 #(1.모양 #구현)


YouTube에서 자바 계산기 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 자바(Java)로 계산기 만들기 (1.모양 구현) | 자바 계산기, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment