java - ListCellRenderer 返回空指针

标签 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}

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

我对 Java 的了解仍然有限,因此任何(简单!)帮助将不胜感激。

最佳答案

您初始化 JLabel 数组:

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

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

关于java - ListCellRenderer 返回空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470967/

相关文章:

java - 不断收到预期的错误类、接口(interface)或枚举

java - 如何查找缺少哪些 Maven 依赖项

java - Class如何寻找资源?

java - 里面有 3 个 JLabel 的 JList

java - 如何为 JComboBox 定义通用 "POJO"ListCellRenderer

java - 如何从终端使用 jar 和 txt 文件编译和运行 Java

java - 开发支持多语言的java客户端时优化jar文件大小(图片)

java - JComboBox 单元渲染器在 Windows 外观和感觉下失败

java - 从组合框中选择项目时如何从数据库获取 ID 值?

Java Swing - Motif L&F 中自定义组合框渲染器中的文本消失