【发布时间】:2013-03-30 21:44:30
【问题描述】:
我想根据我使用 AbstractTableModel 指定的列从数据库中的表中提取数据。表中有 8 列,但只想显示 8 列中的 3 列。
例如:
数据库有这些列:ID、First_Name、Last_Name、....、Phone_Number。如果我指定要在表中显示 First_Name、Last_Name、Phone_Number,它会显示 ID、First_Name 和 Last_Name。我想我应该从数据库中指定列名的索引以显示正确的列,但不知道如何在我的自定义 AbstractTableModel 类中实现它。
public class PhysicianModelController extends AbstractTableModel
{
PhysicianBroker pb = PhysicianBroker.getPhysicianBroker();
private String[] columnNames = {"First Name", "Last Name", "Phone Number"};
private ArrayList<Physician> ph = pb.getAllPhysicians();
@Override
public int getRowCount() {
return ph.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int col)
{
System.out.println(col);
return columnNames[col];
}
@Override
public String getValueAt(int rowIndex, int columnIndex) {
System.out.println(rowIndex + " : " + columnIndex);
Physician p = ph.get(rowIndex);
switch (columnIndex)
{
case 0:
return Integer.toString(p.getEmployeeId());
case 1:
return p.getFirstName();
case 2:
return p.getLastName();
case 3:
return p.getBirthDate();
case 4:
return p.getStartDate();
case 5:
return p.getEndDate();
case 6:
return p.getAddress();
case 7:
return p.getPhoneNumber();
default:
return "Incorrect input";
}
}
public void addRow(Physician p)
{
ph.add(p);
int row = ph.size();
fireTableRowsInserted(row,row);
fireTableDataChanged();
}
@Override
public Class getColumnClass(int c)
{
return getValueAt(0,c).getClass();
}
}
我已经用我的实现覆盖了 getRowCount()、getColumnCount()、getColumnName()、getValueAt() 和 getColumnClass() 方法。一旦我提供了数据库表中的所有列,一切都会正常工作。
有人能帮我解决这个问题吗?
谢谢
【问题讨论】:
-
添加了我的自定义 AbstractTableModel 类。感谢您的快速响应
-
你得到了什么确切的错误?
-
你没有覆盖
setValueAt方法 -
@VishalK 我认为
setValueAt仅在手动编辑表格单元格时使用。 -
@wojg21 既然
String类型的所有列,为什么不在getColumnClass()中使用return String.class;?此外,getValueAt()应该只有 3 个 switch-case。
标签: java swing jtable abstracttablemodel