2013-05-09 73 views
2

这是我在这里的第一篇文章,以便提前道歉,如果这是可怕的......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的认识仍然有限,所以任何(简单!)帮助都将不胜感激。

回答

2

你初始化的JLabel列数组:

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

但是你从来没有填补这个数组的价值观,所以他们会null当你想访问它们。将每个元素设置为new JLabel(),当你需要时,它们不会是null

+0

你真快。 +1 – 2013-05-09 21:03:15

+0

谢谢,这很快!空指针错误不再,但现在JList显示为空? – ms813 2013-05-09 21:10:58

+0

我已经回答了我自己的问题 - 我错过了一个添加(标签[i]);线。谢谢你的帮助! – ms813 2013-05-09 22:15:07

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

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