2

这是我在这里的第一篇文章,所以如果它很糟糕,请提前道歉......

我正在尝试使用自定义 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}

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

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

4

2 回答 2

2

您初始化JLabels 数组:

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

但是你永远不会用值填充这个数组,所以null当你想访问它们时它们就会出现。设置每个元素,当你需要它们时new JLabel()它们不会出现。null

于 2013-05-09T21:00:46.903 回答
1
private JLabel[] labels = new JLabel[3];

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

于 2013-05-09T21:03:00.507 回答