2015-01-21 53 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 

從這一點來說是一個新的Java類

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

更換

frame.add(text); 

通過

panel.add(text); 
0

你沒有將代碼中的任何text.setText(<value>);。我不確定append函數是否可以正常工作。

+1

他呼籲text.setText()和text.append()並附加做正是什麼是正常的追加文本到它已有的文本的末尾,爲什麼你說他沒有? – PhoneixS 2015-01-21 11:58:40

+0

好的,知識傳遞! – roeygol 2015-01-21 17:41:54

0

的問題是,你正在使用JFrame的默認佈局是BorderLayout的添加面板和文本,默認情況下它的組件添加到中心(如果您添加多箇中心,他們會隱藏其他人),您可以在頂部添加一個,並在中心添加一個:

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

您可以看到A Visual Guide to Layout Managers中存在哪些佈局。當然,請參閱Creating a GUI With JFC/Swing關於GUI的oracle官方教程。

此外,你的按鈕被放在流佈局,所以他們將一個接一個。也許你可以使用GridBagLayout來定位它作爲一個真正的計算器。

如果不執行它們,則不需要爲所有類添加主方法。