2013-05-26 3 views
0

У меня проблема с java Window Builder. Мне нужно сделать это приложение, чтобы сохранить имя (textField) в переменной массива из другого класса.Swing - Сохранить текстField в массиве

Итак, когда вы нажимаете кнопку «Новое имя», вы должны передать имя из текстового поля, а также ввести новый и передать новое в следующем массиве и т. Д. После этого имена из массива должны быть показаны в textArea

Проблема заключается в том, что когда я нажимаю кнопку, вместо пропуска текста textField в массив, я получаю много ошибок swing. Если я изменяю переменную «n» из String [] в String, это не дает мне никакой ошибки, но она сохраняет только одно имя.

Класс DATA

public class data { 

String[] n; 

public void saveData(String na, int counter){ 
    n[counter]=na; 
} 

public void showData(int counter){ 
    for (int i = 0; i < counter; i++) { 
     System.out.println(n[counter]); 
    } 
} 

} 

Окно класса

import java.awt.EventQueue; 
public class dataWindow { 

// Data OBJECT 
data d = new data(); 
private JFrame frame; 
private JTextField textName; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       dataWindow window = new dataWindow(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public dataWindow() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JLabel lblName = new JLabel("Name"); 

    textName = new JTextField(); 
    textName.setColumns(10); 

    JButton btnNewName = new JButton("New Name"); 
    btnNewName.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      String n; 
      int c=0; 
      // HERE I GET THE TEXT AND PASS IT TO THE ARRAY IN DATA CLASS 
      // here I think that I get the error when I press the "New Name" button 
      n=textName.getText(); 
      d.saveData(n, c); 

      textName.setText(""); 
      c++; 
     } 
    }); 
    GroupLayout groupLayout = new GroupLayout(frame.getContentPane()); 
    groupLayout.setHorizontalGroup(
     groupLayout.createParallelGroup(Alignment.LEADING) 
      .addGroup(groupLayout.createSequentialGroup() 
       .addGap(44) 
       .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) 
        .addComponent(btnNewName) 
        .addGroup(groupLayout.createSequentialGroup() 
         .addComponent(lblName) 
         .addGap(18) 
         .addComponent(textName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))) 
       .addContainerGap(259, Short.MAX_VALUE)) 
    ); 
    groupLayout.setVerticalGroup(
     groupLayout.createParallelGroup(Alignment.LEADING) 
      .addGroup(groupLayout.createSequentialGroup() 
       .addGap(72) 
       .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) 
        .addComponent(lblName) 
        .addComponent(textName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(ComponentPlacement.RELATED, 114, Short.MAX_VALUE) 
       .addComponent(btnNewName) 
       .addGap(33)) 
    ); 
    frame.getContentPane().setLayout(groupLayout); 
} 

} 

Может кто-то пожалуйста, помогите мне? Заранее спасибо.

ответ

0

Это потому, что вы не инициализировали свой массив.

String[] n = new String[x]; // x is the number of names you want to store. 

Если вы не хотите, чтобы указать определенное количество имен, которые вы хотите сохранить вам нужно будет использовать список.

List<String> n = new ArrayList<String>(); 

Это, вероятно, лучшая реализация для вас.

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