ListCellRenderer返回Null指针

时间:2013-05-09 20:55:50

标签: java listcellrenderer

这是我在这里的第一篇文章,如果它太可怕,请提前道歉......

我正在尝试使用自定义ListCellRenderer将自定义类列表中的项添加到JList中。我想在一行中添加各种内容,并在列表中为每个行添加一行:


    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}

我播放列表的内容以确保它不为null,但上面突出显示的行返回一个空指针。

我对Java的了解仍然有限,因此非常感谢任何(简单!)帮助。

2 个答案:

答案 0 :(得分:2)

您初始化JLabel的数组:

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

但是你从来没有用数值填充这个数组,因此当你想要访问它们时它们将是null。使用new JLabel()设置每个元素,并在需要时不会null

答案 1 :(得分:1)

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

这是错误。您没有初始化数组中的任何标签。

相关问题