2013-09-17 4 views
0

Моей программы начинается с напоминанием пользователя о том, сколько текстовых полей они хотели бы иметьчтение ArrayList JTextFields

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

Следующий я создать цикл для создания этикеток и текстовых полей (которые я создал списки, потому что я не знаете, сколько будет). Есть несколько списков, но я приведу пример только одного.

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()); 

Я попробовал пару вещей ... масса = masses.get (I) ..... масса = masses.get (я) .getText()) и так далее и так далее. Я либо продолжаю получать ошибки, такие как исключения Null pointer или вещи, говорящие, что я не могу parseDouble Object.

Там ошибки, которые arrise для этого примера, как показано ниже

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()); 
+0

Не могли бы вы изменить свой вопрос, чтобы указать, как вы создаете и настраиваете переменную 'mass'? Я подозреваю, что это может быть проблемой. (Нажмите кнопку «edit» в левом нижнем углу вашего вопроса) – Michael0x2a

+0

* «Любые предложения были бы очень полезны». * Предлагаю вам задать вопрос .. Также: 1) Для лучшей помощи раньше, отправьте сообщение [SSCCE] (http://sscce.org/). 2) Всегда копировать/вставлять вывод ошибок и исключений. –

ответ

2

При создании JTextFields, вы делаете:

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

Обратите внимание, что List индексы начинаются с 0, поэтому, когда вы извлекаете элементы с аналогичным циклом, u петь i как индекс, вы пытаетесь получить доступ к одному из последних элементов. Изменение индексов цикла чтения для:

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

Или вы могли бы использовать повышения для цикла, если вам не нужно использовать древнюю версию Java:

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

(Тогда вы действительно должны использовать дженерики тоже, если версия java поддерживает их).

+1

Btw, есть ли особая причина не использовать 'ArrayList '? Это спасло бы литье и было бы хорошо для безопасности типов. – kiheru

+0

ya Я попробовал это и по какой-то странной причине не принял его. он придумал предупреждение: «Тип ArrayList не является общим, его нельзя параметризовать аргументами » –

+1

@DavidJarrin выглядит так, будто вы импортируете неправильный 'ArrayList'. Это должно быть 'java.util.ArrayList' – kiheru

Смежные вопросы