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 ответа

Решение

Вы инициализируете свой массив JLabels:

private JLabel[] labels = new JLabel[3];

Но вы никогда не заполните этот массив значениями, поэтому они будут null когда вы хотите получить к ним доступ. Установите каждый элемент с new JLabel() и они не будут null когда они вам нужны.

private JLabel[] labels = new JLabel[3];

Здесь ошибка. Вы не инициализируете ни одну метку в массиве.

Другие вопросы по тегам