2013-03-29 180 views
1

我試圖讓它顯示計算器上的數字JLabel像普通的計算器一樣。但我不知道如何做到這一點,我所能做的就是讓它成爲一個不會改變的標籤。我把數字字符串放在那裏,但是在你點擊數字後它不會像它應該改變的那樣。有什麼建議?如何獲取MVC計算器java上顯示的數字?

/* 
* calc view class 
*/ 



import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 


class Calc extends JFrame implements ActionListener { 



    private JButton plusButton = new JButton("+"); 
    private JButton minusButton = new JButton("-"); 
    private JButton clearButton = new JButton("Clear"); 
    private JButton equalsButton = new JButton("="); 
    private JButton zeroButton = new JButton("0"); 
    private JButton oneButton = new JButton("1"); 
    private JButton twoButton = new JButton("2"); 
    private JButton threeButton = new JButton("3"); 
    private JButton fourButton = new JButton("4"); 
    private JButton fiveButton = new JButton("5"); 
    private JButton sixButton = new JButton("6"); 
    private JButton sevenButton = new JButton("7"); 
    private JButton eightButton = new JButton("8"); 
    private JButton nineButton = new JButton("9"); 
    private String number = ""; 
    private JLabel numDisplay = new JLabel(number); 
    private boolean addition = false; 
    private boolean subtraction = false; 


    private int total = 0; 
    private boolean isEquals = false; // false = haven't clicked equals button yet, true they have 
    //private String numberText; 

    Calc(){ 
     JPanel calcPanel = new JPanel(); 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setSize(400, 600); 
     calcPanel.add(numDisplay); 
     calcPanel.add(plusButton); 
     calcPanel.add(minusButton); 
     calcPanel.add(clearButton); 
     calcPanel.add(equalsButton); 
     calcPanel.add(zeroButton); 
     calcPanel.add(oneButton); 
     calcPanel.add(twoButton); 
     calcPanel.add(threeButton); 
     calcPanel.add(fourButton); 
     calcPanel.add(fiveButton); 
     calcPanel.add(sixButton); 
     calcPanel.add(sevenButton); 
     calcPanel.add(eightButton); 
     calcPanel.add(nineButton); 

     this.add(calcPanel); 

     plusButton.addActionListener(this); 
     minusButton.addActionListener(this); 
     clearButton.addActionListener(this); 
     equalsButton.addActionListener(this); 
     zeroButton.addActionListener(this); 
     oneButton.addActionListener(this); 
     twoButton.addActionListener(this); 
     threeButton.addActionListener(this); 
     fourButton.addActionListener(this); 
     fiveButton.addActionListener(this); 
     sixButton.addActionListener(this); 
     sevenButton.addActionListener(this); 
     eightButton.addActionListener(this); 
     nineButton.addActionListener(this); 




    } 
    public void actionPerformed(ActionEvent event){ 
     if (event.getSource() instanceof JButton){ 
      JButton clickedButton = (JButton) event.getSource(); 
      String buttonText = clickedButton.getText(); 
      if (clickedButton == zeroButton || clickedButton == oneButton || clickedButton == twoButton || clickedButton == threeButton || clickedButton == fourButton || clickedButton == fiveButton || clickedButton == sixButton || clickedButton == sevenButton || clickedButton == eightButton || clickedButton == nineButton) 
      { 
       number = number + buttonText; 
      } 
      if (clickedButton == clearButton){ 
       number = ""; 
       addition = false; 
       subtraction = false; 
       total = 0; 
      } 
      if (clickedButton == plusButton){ 
       addition = true; 
       subtraction = false; 
       total = Integer.parseInt(number); 

      } 
      if (clickedButton == minusButton){ 
       addition = false; 
       subtraction = true; 
       total = Integer.parseInt(number); 

       //number = ""; 
      } 
      if (clickedButton == equalsButton){ 
       isEquals = true; 
       addition = false; 
       subtraction = false; 
      } 
     } 
    } 

    public int getNumber(){ 
     return Integer.parseInt(number); 
    } 
    public boolean addition(){ 
     return addition; 
    } 
    public boolean subtraction(){ 
     return subtraction; 
    } 
    public int total(){ 
     return total; 
    } 
    public boolean isEquals(){ 
     return isEquals; 
    } 
    public String getNumberString(){ 
     return number; 
    } 
} 

回答

0
private JLabel numDisplay = new JLabel(number); 

所有的代碼行代碼初始化numDisplay變量包含可變數量的文本。這並不意味着每次更改數字變量時標籤都會自動更新。我沒有在你的代碼看起來密切,但你可以嘗試:

number = number + buttonText; 
numDisplay.setText(number); 
+0

好的,謝謝我這樣做,但按下+或 - 按鈕後它不會被清除,所以它只是不斷添加到數字字符串中。有關如何在不過早擦除數字的情況下做到這一點的任何想法? – iNeedHelp

+0

在檢測到+或 - 按鈕點擊後,應首先將顯示存儲在一個整型變量中,例如int number1 = Integer.parseInt(numDisplay.getText()),清除標籤(numDisplay.setText(「」);)和在等於點擊執行加法或減法取決於最後一個操作是什麼樣的se:numDisplay.setText(number1 + Integer.parseInt(numDisplay.getText())); –

0

我認爲你缺少的是在actionPerformed方法的最後調用numDisplay.setText(數字)。 只要你想改變文本,你應該調用這個方法。

相關問題