读取ArrayList JTextFields

时间:2013-09-17 16:15:27

标签: java swing arraylist jtextfield

我的程序首先提示用户他们希望拥有多少文本字段

public class textEvent1 implements ActionListener {    //action listener for "how many masses?"
            public void actionPerformed (ActionEvent e) {
                n = (int)(Double.parseDouble(massNumField.getText())); 

接下来我创建一个for循环来创建标签和文本字段(我创建了列表,因为我不知道会有多少个)。有几个列表,但我会举一个例子。

ArrayList masses = new ArrayList();

    for(int i=1; i<=n; i++) {                                  //adds text event 2 text to the screen
                        massLabel = new JLabel("How much mass does Mass " +i+ " have? ");
                        massField = new JTextField(5);
                        masses.add(massField);

现在,当我尝试将质量列表的元素分配给变量时,我的问题就出现了。

for(int i=1; i<=n; i++) {
                        mass =  Double.parseDouble(((JTextComponent) masses.get(i)).getText());

我尝试了几件事......质量= mass.get(i).....质量= mass.get(i).getText())依此类推。我要么继续得到诸如Null指针异常之类的错误,要么就是说我不能解析对象。

此示例出现的错误如下所示

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
    at java.util.Vector.elementAt(Unknown Source)
    at acmx.export.java.util.ArrayList.get(ArrayList.java:54)
    at Orbit$textEvent2.actionPerformed(Orbit.java:151)

第151行是

mass =  Double.parseDouble(((JTextComponent) masses.get(i)).getText());

1 个答案:

答案 0 :(得分:2)

创建JTextFields时,您可以:

for(int i=1; i<=n; i++) {
    ...

请注意,List索引从0开始,因此当您使用i作为索引检索具有类似循环的项目时,您将尝试访问最后一项之后的项目。将读取循环索引更改为:

for (int i = 0; i < n; i++) {
    ...

或者您可以使用增强for循环,除非您需要使用古老的Java版本:

for (Object massField : masses) {
    mass =  Double.parseDouble(((JTextComponent) massField).getText());
    ...

(如果java版本支持泛色,那么你也应该使用泛型。)

相关问题