Java AWT를 사용하여 계산기 만들기
이 자바 튜토리얼에서는
Java AWT를 사용하여 간단한 계산기를 구축하는 방법을 배웁니다. 이 계산기에는 모든 기본 수학 연산 및 일부 특수 애드온 기능과 같은 몇 가지 간단한 기능이 있습니다.
이제 시작하겠습니다
AWT에 대한 작은 설명 중 첫 번째
AWT(Abstract Window Toolkit)는 GUI(Graphical User Interface) 기반 자바 애플리케이션을 구축하는데 도움을 주는 API입니다.
GUI
는 일부 그래픽을 사용하여 사용자 상호 작용에 도움이 됩니다. 주로 buttons
, windows
, frame
, textfield
, RadioButton
etc
와 같은 단순화된 방식으로 GUI를 생성하고 관리하는 데 필요한 일련의 클래스 및 메서드로 구성됩니다.EventHandling에
Action listener interface
를 사용하는 계산기용 Java 코드를 제공했습니다.그리고 예, 더 이상 사용되지 않는 애플릿 코드가 아닙니다.
import java.awt.*;
import java.awt.event.*;
class MyCalc extends WindowAdapter implements ActionListener{
Frame f;
Label l1;
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0;
Button badd,bsub,bmult,bdiv,bmod,bcalc,bclr,bpts,bneg,bback;
double xd;
double num1,num2,check;
MyCalc(){
f= new Frame("MY CALCULATOR");
// INSTANTIATING COMPONENETS
l1=new Label();
l1.setBackground(Color.LIGHT_GRAY);
l1.setBounds(50,50,260,60);
b1=new Button("1");
b1.setBounds(50,340,50,50);
b2=new Button("2");
b2.setBounds(120,340,50,50);
b3=new Button("3");
b3.setBounds(190,340,50,50);
b4=new Button("4");
b4.setBounds(50,270,50,50);
b5=new Button("5");
b5.setBounds(120,270,50,50);
b6=new Button("6");
b6.setBounds(190,270,50,50);
b7=new Button("7");
b7.setBounds(50,200,50,50);
b8=new Button("8");
b8.setBounds(120,200,50,50);
b9=new Button("9");
b9.setBounds(190,200,50,50);
b0=new Button("0");
b0.setBounds(120,410,50,50);
bneg=new Button("+/-");
bneg.setBounds(50,410,50,50);
bpts=new Button(".");
bpts.setBounds(190,410,50,50);
bback=new Button("back");
bback.setBounds(120,130,50,50);
badd=new Button("+");
badd.setBounds(260,340,50,50);
bsub=new Button("-");
bsub.setBounds(260,270,50,50);
bmult=new Button("*");
bmult.setBounds(260,200,50,50);
bdiv=new Button("/");
bdiv.setBounds(260,130,50,50);
bmod=new Button("%");
bmod.setBounds(190,130,50,50);
bcalc=new Button("=");
bcalc.setBounds(245,410,65,50);
bclr=new Button("CE");
bclr.setBounds(50,130,65,50);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bpts.addActionListener(this);
bneg.addActionListener(this);
bback.addActionListener(this);
badd.addActionListener(this);
bsub.addActionListener(this);
bmult.addActionListener(this);
bdiv.addActionListener(this);
bmod.addActionListener(this);
bcalc.addActionListener(this);
bclr.addActionListener(this);
f.addWindowListener(this);
//ADDING TO FRAME
f.add(l1);
f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5);f.add(b6); f.add(b7); f.add(b8);f.add(b9);f.add(b0);
f.add(badd); f.add(bsub); f.add(bmod); f.add(bmult); f.add(bdiv); f.add(bmod);f.add(bcalc);
f.add(bclr); f.add(bpts);f.add(bneg); f.add(bback);
f.setSize(360,500);
f.setLayout(null);
f.setVisible(true);
}
//FOR CLOSING THE WINDOW
public void windowClosing(WindowEvent e) {
f.dispose();
}
public void actionPerformed(ActionEvent e){
String z,zt;
//NUMBER BUTTON
if(e.getSource()==b1){
zt=l1.getText();
z=zt+"1";
l1.setText(z);
}
if(e.getSource()==b2){
zt=l1.getText();
z=zt+"2";
l1.setText(z);
}
if(e.getSource()==b3){
zt=l1.getText();
z=zt+"3";
l1.setText(z);
}
if(e.getSource()==b4){
zt=l1.getText();
z=zt+"4";
l1.setText(z);
}
if(e.getSource()==b5){
zt=l1.getText();
z=zt+"5";
l1.setText(z);
}
if(e.getSource()==b6){
zt=l1.getText();
z=zt+"6";
l1.setText(z);
}
if(e.getSource()==b7){
zt=l1.getText();
z=zt+"7";
l1.setText(z);
}
if(e.getSource()==b8){
zt=l1.getText();
z=zt+"8";
l1.setText(z);
}
if(e.getSource()==b9){
zt=l1.getText();
z=zt+"9";
l1.setText(z);
}
if(e.getSource()==b0){
zt=l1.getText();
z=zt+"0";
l1.setText(z);
}
if(e.getSource()==bpts){ //ADD DECIMAL PTS
zt=l1.getText();
z=zt+".";
l1.setText(z);
}
if(e.getSource()==bneg){ //FOR NEGATIVE
zt=l1.getText();
z="-"+zt;
l1.setText(z);
}
if(e.getSource()==bback){ // FOR BACKSPACE
zt=l1.getText();
try{
z=zt.substring(0, zt.length()-1);
}catch(StringIndexOutOfBoundsException f){return;}
l1.setText(z);
}
//AIRTHMETIC BUTTON
if(e.getSource()==badd){ //FOR ADDITION
try{
num1=Double.parseDouble(l1.getText());
}catch(NumberFormatException f){
l1.setText("Invalid Format");
return;
}
z="";
l1.setText(z);
check=1;
}
if(e.getSource()==bsub){ //FOR SUBTRACTION
try{
num1=Double.parseDouble(l1.getText());
}catch(NumberFormatException f){
l1.setText("Invalid Format");
return;
}
z="";
l1.setText(z);
check=2;
}
if(e.getSource()==bmult){ //FOR MULTIPLICATION
try{
num1=Double.parseDouble(l1.getText());
}catch(NumberFormatException f){
l1.setText("Invalid Format");
return;
}
z="";
l1.setText(z);
check=3;
}
if(e.getSource()==bdiv){ //FOR DIVISION
try{
num1=Double.parseDouble(l1.getText());
}catch(NumberFormatException f){
l1.setText("Invalid Format");
return;
}
z="";
l1.setText(z);
check=4;
}
if(e.getSource()==bmod){ //FOR MOD/REMAINDER
try{
num1=Double.parseDouble(l1.getText());
}catch(NumberFormatException f){
l1.setText("Invalid Format");
return;
}
z="";
l1.setText(z);
check=5;
}
//RESULT BUTTON
if(e.getSource()==bcalc){
try{
num2=Double.parseDouble(l1.getText());
}catch(Exception f){
l1.setText("ENTER NUMBER FIRST ");
return;
}
if(check==1)
xd =num1+num2;
if(check==2)
xd =num1-num2;
if(check==3)
xd =num1*num2;
if(check==4)
xd =num1/num2;
if(check==5)
xd =num1%num2;
l1.setText(String.valueOf(xd));
}
//FOR CLEARING THE LABEL and Memory
if(e.getSource()==bclr){
num1=0;
num2=0;
check=0;
xd=0;
z="";
l1.setText(z);
}
}
//MAIN METHOD where objects of MyCalc is instantaiated
public static void main(String args[]){
new MyCalc();
}
}
그래서 내가 한 것은 우리의
ActionListener
클래스와 생성자에서 MyCalc
인터페이스를 구현한 것입니다. i AWT 구성 요소를 리스너에 등록하고 actionPerformed
메서드를 사용하여 EventHandling을 완료했습니다.아래에서 볼 수 있는 이
actionPerformed
함수로만 작성된 모든 논리 부분:로직 파트
1. 숫자 버튼의 경우
if(e.getSource()==b1){ //b1 for number 1
zt=l1.getText();
z=zt+"1";// 1 will merged at the end of the previous value
l1.setText(z);
}
숫자 버튼 중 하나를 눌렀을 때
레이블
l1
의 모든 값은 변수zt
에 저장되고 해당 숫자와 연결된 다음 레이블l1
에 표시됩니다.NEGATIVE 및 DECIMAL PTS 버튼에 대해 유사하게 수행했습니다.
2. AIRTHMETIC 버튼
if(e.getSource()==badd){ //FOR ADDITION
num1=Double.parseDouble(l1.getText());
z="";
l1.setText(z);
check=1; // 1 for the adddition
}
이제 기술적으로 첫 번째 숫자가 될 double 유형으로 변환한 후 레이블
l1
의 값을 변수num1
에 저장합니다.그런 다음 레이블
l1
을 null
로 설정합니다.check
변수를 사용하여 이 특정 에어스메틱 버튼(여기서는 +
)을 클릭하여 =
버튼에서 이 작업을 수행할 수 있습니다.3. EQUALS 버튼
if(e.getSource()==bcalc){
num2=Double.parseDouble(l1.getText());
if(check==1)
xd =num1+num2;
if(check==2)
xd =num1-num2;
if(check==3)
xd =num1*num2;
if(check==4)
xd =num1/num2;
if(check==5)
xd =num1%num2;
l1.setText(String.valueOf(xd));
}
이제
l1
의 값을 기술적으로 두 번째 숫자가 될 num2
변수에 다시 저장합니다.그런 다음 변수 값
check
을 확인하고 해당 작업을 수행한 후 결과를 레이블l1
에 표시합니다.4. 지우기 버튼
if(e.getSource()==bclr){
num1=0;
num2=0;
check=0;
xd=0;
z="";
l1.setText(z);
}
여기에서 사용하는 모든 변수를 기본값
0
으로 업데이트했습니다.나중에 새 계산을 시작할 수 있도록 레이블
l1
을 null
로 설정합니다.5. 백스페이스 버튼용
if(e.getSource()==bback){ // FOR BACKSPACE
zt=l1.getText();
try{
z=zt.substring(0, zt.length()-1);
}catch(StringIndexOutOfBoundsException f){return;}
l1.setText(z);
}
여기서는
l1
함수를 사용하여 마지막 숫자를 제거하여 substring
의 값을 업데이트합니다.StringIndexOutOfBoundsException
의 값이 null이고 여전히 label
버튼을 누르고 있을 때 발생하는 하나back
를 처리했습니다.6. 특수 애드온 기능
내가 한 것은 EQUAL 및 모든 AIRTHMETIC 버튼에서 하나의 예외를 처리하고 상황에 따라 원하는 메시지를 인쇄했습니다.
AIRTHMETIC 버튼 내부:
try{
num1=Double.parseDouble(l1.getText());
}catch(NumberFormatException f){
l1.setText("Invalid Format");
return;
}
EQUALS 버튼 내부:
try{
num2=Double.parseDouble(l1.getText());
}catch(Exception f){
l1.setText("ENTER NUMBER FIRST ");
return;
}
값을 이중 값으로 변환할 때 레이블
l1
에 값null
이 있고(즉, 레이블이 비어 있음) 이 버튼을 계속 누르면 예외가 생성됩니다NumberFormatException
.그렇게 처리하고 원하는 메시지를 인쇄했습니다.
예를 들면:
1
를 클릭한 다음 +
를 클릭한 다음 다른 숫자 버튼 대신 -
를 클릭하면 잘못된 형식이며 그 당시 -
를 클릭했을 때 label
는 null
이므로 예외가 생성되었습니다. invalid format
에서 label
를 처리하고 인쇄했습니다.마찬가지로
label
가 null
이고 =
가 클릭된 경우 ENTER NUMBER FIRST
가 label
안에 표시됩니다.이것으로 우리는 이 Java AWT 튜토리얼을 마칩니다.
따라서 코드를 살펴보고 시도해 보세요. 코드를 이해하거나 사용하는 데 어려움이 있으면 아래에 댓글로 질문하십시오.
내
CALC
를 다운로드하고 실행하려면 here을 찾을 수 있습니다.소스 코드와 실행 가능한 jarfile을 모두 업로드했습니다.
감사합니다!
다음에서 나를 팔로우할 수 있습니다.
Reference
이 문제에 관하여(Java AWT를 사용하여 계산기 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rohitk570/creating-a-calculator-using-java-awt-16ll텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)