2011-05-04 76 views
1
public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("test"); 
     JPanel panel = new JPanel(); 

     Component a[] = null; 

     for(int i=0; i<3; i++) 
     { 
      final JTextField t = new JTextField(); 
      t.setColumns(5); 

      a[i] = t; 

      t.addKeyListener(new KeyListener() { 

       public void keyReleased(KeyEvent e) 
       { 

       } 

       public void keyTyped(KeyEvent e) {} 
       public void keyPressed(KeyEvent e) {} 
      }); 
      panel.add(t); 
     } 

     JTextField sum = new JTextField(); 
     sum.setColumns(5); 
     panel.add(sum); 

     JScrollPane spanel = new JScrollPane(panel); 
     frame.add(spanel); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
    } 

我怎樣才能總結值後按下我每個領域,從循環顯示的所有領域?java字段值總和

+0

你會發現這些問題對於後續問題很有用:[如何使用ArrayList](http://stackoverflow.com/questions/2697182/how-to-use-an-array-list)和[Can not引用內部類中的非最終變量](http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in -a-不同) – McDowell 2011-05-04 12:31:23

回答

1

由於您使用固定數量的文本字段(上面的代碼示例中有3個),我會使用數組來保持對它們的引用並計算按下鍵時寫入它們的值的總和。然後,您可以遍歷數組(如果選擇具有更多文本字段,則使用大小3或其他大小)並將文本字段中的所有數字相加。擴展你已經提供的代碼,它看起來像這樣:

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame("test"); 
    JPanel panel = new JPanel(); 
    int nrOfTextFields = 3; 
    JTextField[] textFields = new JTextField[nrOfTextFields]; 
    int sumOfallTextFields = 0; 
    for(int i=0; i<nrOfTextFields; i++) 
    { 
     final JTextField t = new JTextField(); 
     t.setColumns(5); 
     t.addKeyListener(new KeyListener() 
     { 
       public void keyReleased(KeyEvent e) 
       { 
        sumOfAllTextFields = 0; 
        for(int i=0; i<nrOfTextFields; i++) 
        { 
          int textFieldValue = Integer.parseInt(textFields[i].getString()); 
          sumOfAllTextFields += textFieldValue; 
        } 
       } 
       public void keyTyped(KeyEvent e) {} 
      public void keyPressed(KeyEvent e) {} 
     }); 
     panel.add(t); 
    } 
    JTextField sum = new JTextField(); 
    sum.setColumns(5); 
    panel.add(sum); 
    JScrollPane spanel = new JScrollPane(panel); 
    frame.add(spanel); 
    frame.setSize(800, 600); 
    frame.setVisible(true); 
} 

這是假設輸入到文本字段中的數字是整數。也不檢查用戶是否在文本字段中輸入了有效的數字(例如,沒有文本或符號)。

1

您可以嘗試先將所有文本字段添加到數組中,然後當按下某個鍵時,遍歷數組並對值進行求和。

+0

我已經綁定類似這樣的組件a [] = null;並在循環a [i] = t;但我得到了「線程中的異常」main「java.lang.NullPointerException \t at First.main(First.java:33)」 – 2011-05-04 12:10:04

+0

@ skiwron-line - 你得到一個NPE,因爲'a'指向'null' - a'是對數組的引用,而不是數組對象本身(這適用於所有對象引用)。如果您想要一個可以動態增長的數據結構,請使用[List](http://download.oracle.com/javase/6/docs/api/java/awt/List.html) - 'List l = new ArrayList ();'和'l.add(t);' – McDowell 2011-05-04 12:24:34

+0

@ skowron-line:請編輯您的問題,並對代碼進行最新更改。 – 2011-05-04 12:24:46