2011-05-04 78 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