Вам нужно инициализировать свои кнопки перед добавлением их на панель.
for(int i = 0;i<buttons.length ; i++){
buttons[i] = new JButton();
panel.add(buttons[i]);
}
Также обратите внимание на изменение, которое я внес в цикл for i < buttons.length
вместо i <= buttons.length
Вот небольшой пример использования различных кнопок J ( здесь ). Он также включает в себя добавление ImageIcons к кнопкам. кнопка ошибки.
URL imgURL = JButtonDemo.class.getResource("Error.jpg");
ImageIcon icon = new createImageIcon(imgURL ); // should check that imgURL is not null
buttons[0] = new JButton("Error!",icon);
Это делает их немного более полезными, чем значение по умолчанию JButton