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}

リストの内容を調べて null でないことを確認しましたが、上で強調表示された行は null ポインターを返します。

Java に関する私の知識はまだ限られているため、(簡単な!) ヘルプをいただければ幸いです。

4

2 に答える 2

2

の配列を初期化しますJLabel

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 に答える