Swing - сохранить текстовое поле в массиве

У меня проблема с приложением Java Window Builder. Мне нужно, чтобы это приложение сохраняло имя (textField) в переменную массива из другого класса.

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

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

ДАННЫЕ Класс

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

}

Кто-нибудь может мне помочь? Заранее спасибо.


person user2328079    schedule 26.05.2013    source источник


Ответы (1)


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

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

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

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

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

person Waddas    schedule 26.05.2013