Проблема с массивом JTextField

Итак, я работаю с двумерным массивом JTextField для программы судоку.

public JTextField[][] userInputArray = new JTextField[9][9];

Сейчас. Я получаю постоянное исключение нулевого указателя и не могу понять, как это исправить. Это происходит от запуска этого метода:

    public void showTextFields()
{
    int rowCounter = 0;
    int columnCounter = 0;

    for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
    {
        for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
        {
            pane.setLayout(new GridLayout(9, 9));
            //pane.add(userInputArray[rowCounter][columnCounter]);
            //userInputArray[rowCounter][columnCounter].setColumns(1);
            //userInputArray[rowCounter][columnCounter].setVisible(true);
        }
    }
}

Все, что закомментировано, вызовет исключение nullpointerException.

Оптимально, моя цель - отобразить JTextFields на экране, назначив их в сетке.

NullPointerException возникает в pane.add(...)


person Not Joel    schedule 26.10.2012    source источник
comment
Что такое pane? Где это определено? Включите больше кода.   -  person sampson-chen    schedule 26.10.2012
comment
Извините, это Контейнер.   -  person Not Joel    schedule 26.10.2012


Ответы (2)


Пока вы создали 2D-массив для размещения ваших полей, вам необходимо создать экземпляры JTextField компонентов в вашем массиве.

for (int i =0; i < userInputArray.length; i++) {
   for (int j =0; j < userInputArray[0].length; j++) {
      userInputArray[i][j] = new JTextField();
   }
}
person Reimeus    schedule 26.10.2012

Когда вы объявляете массив, он инициализируется значениями по умолчанию. Значение по умолчанию для Object равно null, поэтому вам нужно сначала создать экземпляры объектов, прежде чем использовать их.

userInputArray[rowCounter][columnCounter] = new JTextField();

Итак, теперь ваш код должен выглядеть так, как показано ниже.

for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
    {
        pane.setLayout(new GridLayout(9, 9));
        userInputArray[rowCounter][columnCounter] = new JTextField();
        pane.add(userInputArray[rowCounter][columnCounter]);
        userInputArray[rowCounter][columnCounter].setColumns(1);
        userInputArray[rowCounter][columnCounter].setVisible(true);
    }
person Amit Deshpande    schedule 26.10.2012