这是我在这里的第一篇文章,如果这很可怕的话,请提前道歉.
我试图使用自定义JList将自定义类列表中的项添加到ListCellRenderer中。每个行都有我想添加到一行中的各种内容,列表中的每一行都有一个新的行:
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的知识仍然有限,所以任何(简单的!)我会很感激你的帮助。
发布于 2013-05-09 21:00:46
初始化JLabel的数组:
private JLabel[] labels = new JLabel[3];但是,您永远不会用值填充这个数组,因此当您想要访问它们时,它们将是null。用new JLabel()设置每个元素,当您需要它们时,它们不会是null。
发布于 2013-05-09 21:03:00
private JLabel[] labels = new JLabel[3];这是错误。不初始化数组中的任何标签。
https://stackoverflow.com/questions/16470967
复制相似问题