2015-01-21 1 views
-1

GUI 인터페이스를 사용하여 계산기를 만들려고합니다. 아래 코드는이 작업을 수행하기위한 것이지만 입력 할 수있는 빈 공간 만 만듭니다. 그게 뭐가 잘못 되었 니? 이 시점에서이 GUI 계산기가 작동하지 않습니다. 무엇이 잘못 되었습니까?

public class CalculatorMain extends Calculator_ui 
    { 
     public static void main(String[] args) 
     { 
      Calculator_ui n=new Calculator_ui(); 
      n.ui(); 

     }//main 
    }//class 

는 새로운 자바 클래스

import javax.swing.*; 
    import java.awt.FlowLayout; 
    import java.awt.event.ActionListener; 
    import java.awt.event.ActionEvent; 

    public class Calculator_ui implements ActionListener 
    { 
     JFrame frame=new JFrame("Calculator"); 
     JPanel panel=new JPanel(new FlowLayout()); 

     JTextArea text=new JTextArea(5,20); 

     JButton but1=new JButton("1"); 
     JButton but2=new JButton("2"); 
     JButton but3=new JButton("3"); 
     JButton but4=new JButton("4"); 
     JButton but5=new JButton("5"); 
     JButton but6=new JButton("6"); 
     JButton but7=new JButton("7"); 
     JButton but8=new JButton("8"); 
     JButton but9=new JButton("9"); 
     JButton but0=new JButton("0"); 

     JButton butadd=new JButton("+"); 
     JButton butsub=new JButton("-"); 
     JButton butmulti=new JButton("*"); 
     JButton butdiv=new JButton("/"); 
     JButton buteq=new JButton("="); 

     JButton butclear=new JButton("C"); 

     Double number1,number2,result; 
     int addc=0,subc=0,multic=0,divc=0; 

     public void ui() 
     { 
      frame.setVisible(true); 
      frame.setSize(250,200); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      frame.add(panel); 

      frame.add(text); 

      panel.add(but1); 
      panel.add(but2); 
      panel.add(but3); 
      panel.add(but4); 
      panel.add(but5); 
      panel.add(but6); 
      panel.add(but7); 
      panel.add(but8); 
      panel.add(but9); 
      panel.add(but0); 

      panel.add(butadd); 
      panel.add(butsub); 
      panel.add(butmulti); 
      panel.add(butdiv); 
      panel.add(buteq); 
      panel.add(butclear); 

      but1.addActionListener(this); 
      but2.addActionListener(this); 
      but3.addActionListener(this); 
      but4.addActionListener(this); 
      but5.addActionListener(this); 
      but6.addActionListener(this); 
      but7.addActionListener(this); 
      but8.addActionListener(this); 
      but9.addActionListener(this); 
      but0.addActionListener(this); 
      butadd.addActionListener(this); 
      butsub.addActionListener(this); 
      butmulti.addActionListener(this); 
      butdiv.addActionListener(this); 
      buteq.addActionListener(this); 
      butclear.addActionListener(this); 



     } 
     public void actionPerformed(ActionEvent e) 
     { 
      Object source=e.getSource(); 

      if(source==butclear) 
      { 
      number1=0.0; 
      number2=0.0; 
      text.setText(""); 
      } 
      if(source==but1) 
      { 
      text.append("1"); 
      } 
      if(source==but2) 
      { 
      text.append("2"); 
      } 
      if(source==but3) 
      { 
      text.append("3"); 
      } 
      if(source==but4) 
      { 
      text.append("4"); 
      } 
      if(source==but5) 
      { 
      text.append("5"); 
      } 
      if(source==but6) 
      { 
      text.append("6"); 
      } 
      if(source==but7) 
      { 
      text.append("7"); 
      } 
      if(source==but8) 
      { 
      text.append("8"); 
      } 
      if(source==but9) 
      { 
      text.append("9"); 
      } 
      if(source==but0) 
      { 
      text.append("0"); 
      } 
      if(source==butadd) 
      { 
      number1=number_reader(); 
      text.setText(""); 
      addc=1; 
      subc=0; 
      multic=0; 
      divc=0; 
      } 
      if(source==butsub) 
      { 
      number1=number_reader(); 
      text.setText(""); 
      addc=0; 
      subc=1; 
      multic=0; 
      divc=0; 
      } 
      if(source==butmulti) 
      { 
      number1=number_reader(); 
      text.setText(""); 
      addc=0; 
      subc=0; 
      multic=1; 
      divc=0; 
      } 
      if(source==butdiv) 
      { 
      number1=number_reader(); 
      text.setText(""); 
      addc=0; 
      subc=0; 
      multic=0; 
      divc=1; 
      } 
      if(source==buteq) 
      { 
      number2=number_reader(); 
      if(addc>0) 
      { 
       result=number1+number2; 
       text.setText(Double.toString(result)); 
      } 
      if(subc>0) 
      { 
       result=number1-number2; 
       text.setText(Double.toString(result)); 
      } 
      if(multic>0) 
      { 
       result=number1*number2; 
       text.setText(Double.toString(result)); 
      } 
      if(divc>0) 
      { 
       result=number1/number2; 
       text.setText(Double.toString(result)); 
      } 
      } 
     } 

     public double number_reader() 
     { 
      Double num1; 
      String s; 
      s=text.getText(); 
      num1=Double.valueOf(s); 

      return num1; 
     } 




     public static void main(String[] args) 
     { 

     }//main 
    }//class 

답변

0

당신은 당신의 코드에서 어떤 text.setText(<value>);을하지 않을 것입니다. append 기능이 원하는대로 작동하는지 확신 할 수 없습니다.

+1

그는 text.setText() 및 text.append()를 호출하고 append는 텍스트의 끝에 텍스트를 추가하는 것과 정확히 똑같은 작업을 수행합니다. 왜 그가 그렇게하지 않았다고 말했습니까? – PhoneixS

+0

알았어, 지식 전수! – roeygol

0

문제로

frame.add(text); 

당신은 BorderLayout를 패널과 텍스트를 추가하는 것입니다 JFrame의 기본 레이아웃을 사용하고 기본적으로가 구성 요소를 추가하는 것입니다 교체 센터 (둘 이상의 항목을 추가하면 다른 사용자를 숨길 수 있음) 상단에 하나를 추가하고 중앙에 하나를 추가하여 다음과 같이 추가 할 수 있습니다.

frame.add(panel, BorderLayout.SOUTH); 
    frame.add(text, BorderLayout.CENTER); 

A Visual Guide to Layout Managers에 어떤 레이아웃이 있는지 확인할 수 있습니다. 물론 GUI에 관한 오라클 공식 자습서도 Creating a GUI With JFC/Swing에 있습니다.

또한 단추가 순서대로 배치되도록 흐름 레이아웃에 배치됩니다. 어쩌면 GridBagLayout을 사용하여 실제 계산기로 배치 할 수 있습니다.

그리고 실행되지 않을 경우 모든 메소드에 main 메소드를 추가 할 필요가 없습니다.

관련 문제