ListCellRenderer, возвращающий нулевой указатель
Это мой первый пост, поэтому заранее извиняюсь, если это ужасно...
Я пытаюсь добавить элементы из списка пользовательских классов в JList, используя пользовательский ListCellRenderer. У каждого есть несколько вещей, которые я хотел бы добавить в строку, с новой строкой, выбранной для каждого в списке:
public class MatchRecord {
private String player;
private Integer kills;
private Integer deaths;
private Integer assists;//getters + setters etc etc below}
private class GameStatistics{//this is the main class of the program
listModel = new DefaultListModel();
jList.setModel(listModel);
listModel.clear(); //get rid of any junk in the list before loading
recordJList.setLayoutOrientation(JList.VERTICAL);
//add the records to the JList
recordJList.setCellRenderer(new RecordListRenderer());
List<MatchRecord> list = new ArrayList();
list.addAll(recordSet); //recordSet is a Set<MatchRecord> which has been previously loaded from file
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i).getPlayer()); //this is NOT NULL!
listModel.addElement(list.get(i));
}
}
public class RecordListRenderer extends JPanel implements ListCellRenderer {
private JLabel[] labels = new JLabel[3];
public RecordListRenderer(){
setOpaque(true);
setLayout(new GridLayout(1, 4));
//set font size + colour here
}
public Component getListCellRendererComponent(JList list,
Object r,
int index,
boolean isSelected,
boolean hasFocus){
MatchRecord record = (MatchRecord) r;
labels[0].setText(record.getPlayer()); //This line returns a null pointer
labels[1].setText(record.getKills());
labels[2].setText(record.getDeaths());
labels[3].setText(record.getAssists());
return this}
Я проверяю содержимое списка, чтобы убедиться, что оно не равно нулю, но выделенная выше строка возвращает нулевой указатель.
Мои знания Java все еще ограничены, поэтому любая (простая!) Помощь будет высоко ценится.
2 ответа
Вы инициализируете свой массив JLabel
s:
private JLabel[] labels = new JLabel[3];
Но вы никогда не заполните этот массив значениями, поэтому они будут null
когда вы хотите получить к ним доступ. Установите каждый элемент с new JLabel()
и они не будут null
когда они вам нужны.
private JLabel[] labels = new JLabel[3];
Здесь ошибка. Вы не инициализируете ни одну метку в массиве.