1

我是java swing的新手,请帮助我。我有一个简单的应用程序,它接收来自(姓名和职业)的数据,并在按下按钮后将2 JTextfileds它们引入。JTable数据存储在List<Person>where 中Person(String name, String occupation)。该应用程序运行良好,直到我尝试使用TableRowSorter. 我只会给你TablePanelPersonTableModel代码。

表面板类

import model.Person;

public class TablePanel extends JPanel {

    private JTable table;
    private PersonTableModel tablemodel;
    private TableListener tableListener;
    private RowSorter<PersonTableModel> sorter;

    public TablePanel(){
        tablemodel = new PersonTableModel();
        table = new JTable(tablemodel);


        //addSorter(); --- > comment this for you to see the problem


        setLayout(new BorderLayout());
        add(new JScrollPane(table),BorderLayout.CENTER);


    }

    private void addSorter() {
        if (tablemodel.getRowCount() != 0){
        sorter = new TableRowSorter<PersonTableModel>(tablemodel);
        table.setRowSorter(sorter);
        refresh();
        }
    }

    public void setData(List<Person> db){
        tablemodel.setData(db);
    }

    public void refresh(){
        tablemodel.fireTableDataChanged();
    }

    public void addTableListener(TableListener tableListener) {
        this.tableListener = tableListener;

    }
}

PersonTableModel 类

public class PersonTableModel extends AbstractTableModel {

    private List<Person> db = null;

    private String[] colNames = { "Id", "Name", "Occupation" };

    public void setData(List<Person> db) {
        this.db = db;
    }

    public String getColumnName(int column) {
        return colNames[column];
    }

    public int getRowCount() {
        return db.size();
    }

    @Override
    public int getColumnCount() {
        return 3;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Person person = db.get(rowIndex);

        switch (columnIndex) {
        case 0:
            return person.getId();
        case 1:
            return person.getName();
        case 2:
            return person.getOccupation();
        }
        return null;
    }
}

如果我激活该方法,为什么我会收到NullPointerExceptionin方法?getRowCount()PersonTableModeladdSorter()

4

0 回答 0