首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListCellRenderer返回空指针

ListCellRenderer返回空指针
EN

Stack Overflow用户
提问于 2013-05-09 20:55:49
回答 2查看 340关注 0票数 2

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

我试图使用自定义JList将自定义类列表中的项添加到ListCellRenderer中。每个行都有我想添加到一行中的各种内容,列表中的每一行都有一个新的行:

代码语言:javascript
复制
    public class MatchRecord {
    private String player;
    private Integer kills;
    private Integer deaths;
    private Integer assists;//getters + setters etc etc below}

代码语言:javascript
复制
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));
        }
}

代码语言:javascript
复制
    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的知识仍然有限,所以任何(简单的!)我会很感激你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-09 21:00:46

初始化JLabel的数组:

代码语言:javascript
复制
private JLabel[] labels = new JLabel[3];

但是,您永远不会用值填充这个数组,因此当您想要访问它们时,它们将是null。用new JLabel()设置每个元素,当您需要它们时,它们不会是null

票数 2
EN

Stack Overflow用户

发布于 2013-05-09 21:03:00

代码语言:javascript
复制
private JLabel[] labels = new JLabel[3];

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16470967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档