Java 方法getRowCount()在尝试对Jtable进行排序时返回错误
我是JavaSwing的新手,请帮助我。 我有一个简单的应用程序,它接收来自2个JTextfiled name和occulation的数据,并在按下按钮后将它们引入JTable。数据存储在一个列表中,其中包含PersonString名称、字符串占用。 在我尝试使用TableRowSorter对表格进行排序之前,该应用程序运行良好。 我只给你TablePanel和PersonTableModel代码 桌面类 PersonTableModel类Java 方法getRowCount()在尝试对Jtable进行排序时返回错误,java,swing,jtable,abstracttablemodel,rowsorter,Java,Swing,Jtable,Abstracttablemodel,Rowsorter,我是JavaSwing的新手,请帮助我。 我有一个简单的应用程序,它接收来自2个JTextfiled name和occulation的数据,并在按下按钮后将它们引入JTable。数据存储在一个列表中,其中包含PersonString名称、字符串占用。 在我尝试使用TableRowSorter对表格进行排序之前,该应用程序运行良好。 我只给你TablePanel和PersonTableModel代码 桌面类 PersonTableModel类 如果激活方法addSorter,为什么在PersonT
如果激活方法addSorter,为什么在PersonTableModel中的方法getRowCount中收到NullPointerException 您已将db初始化为null,因此在getRowCount之前,您必须调用setData并对其进行初始化,否则您将在db.sizeit上获得NUllPointer,如果我让它只列出db,它将不起作用;你从没打过setData。。。在PersonTableModel上,因此NullPointerExceptionchange行private List db=null;to private List db=new ArrayList;谢谢辛哈卡什!它现在可以正常工作了:D
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;
}
}
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;
}
}