Java JTable是否必须显示TableModel中的所有数据?

Java JTable是否必须显示TableModel中的所有数据?,java,swing,Java,Swing,如果有人不介意给我一些建议的话,我的设计(无可否认是很差的)有点困难 我有一个表单,可以将人添加到数据库中。数据库显示在JTable中,该表使用通过控制器更新的自定义TableModel(而不是JTable中的模型引用)。单击表中的行时,所选行的数据将使用table.getValueAt(行,列) 我这里的问题是,我希望detailsPanel显示person/db条目的更详细版本。TableModel被传递给一组人员,因此我想我可以在TableModel中实现一个方法来检索我想要的信息,但我不

如果有人不介意给我一些建议的话,我的设计(无可否认是很差的)有点困难

我有一个表单,可以将人添加到数据库中。数据库显示在JTable中,该表使用通过控制器更新的自定义TableModel(而不是JTable中的模型引用)。单击表中的行时,所选行的数据将使用
table.getValueAt(行,列)

我这里的问题是,我希望detailsPanel显示person/db条目的更详细版本。TableModel被传递给一组人员,因此我想我可以在TableModel中实现一个方法来检索我想要的信息,但我不确定如何实现

基本上,我不知道如何单击TableModel可以访问的JTable和retrieve数据中的一行,但该行不显示在表本身中(在本例中,每个Person实例都有一个我想要检索的CV URI)。到目前为止,我的最大努力是添加一行
case10:returnp.getCvURI()返回一个索引越界异常,并演示了我对表模型如何工作的有限理解

以下是TableModel类:

package gui;

import model.Person;
import javax.swing.table.AbstractTableModel;
import java.util.List;
import java.util.ArrayList;

public class CandidateTableModel extends AbstractTableModel{
private List<Person> data = new ArrayList<Person>();
private String[] colNames = {"ID","Title","Name","Surname","Address 1","Address 2","Address 3",
                "Postcode","Employment Status","Search Status"};

public CandidateTableModel(){}

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

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

@Override
public int getRowCount(){
    return data.size();
}

@Override
public Object getValueAt(int row, int column){
    Person p = data.get(row);
    switch(column){
        case 0: return p.getID();
        case 1: return p.getTitle();
        case 2: return p.getFName();
        case 3: return p.getSName();
        case 4: return p.getAddress1();
        case 5: return p.getAddress2();
        case 6: return p.getAddress3();
        case 7: return p.getPostcode();
        case 8: return p.getEmpStatus();
        case 9: return p.getSearchStatus();
    }
    return null;
}

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

}
packagegui;
输入模型。人;
导入javax.swing.table.AbstractTableModel;
导入java.util.List;
导入java.util.ArrayList;
公共类CandidateTableModel扩展了AbstractTableModel{
私有列表数据=新的ArrayList();
私有字符串[]colNames={“ID”、“头衔”、“姓名”、“姓氏”、“地址1”、“地址2”、“地址3”,
“邮政编码”、“就业状况”、“搜索状况”};
public CandidateTableModel(){}
@凌驾
公共字符串getColumnName(int列){
返回colNames[列];
}
@凌驾
public int getColumnCount(){
返回10;
}
@凌驾
public int getRowCount(){
返回data.size();
}
@凌驾
公共对象getValueAt(int行,int列){
Person p=data.get(行);
开关(列){
案例0:返回p.getID();
案例1:返回p.getTitle();
案例2:返回p.getFName();
案例3:返回p.getSName();
案例4:返回p.getAddress1();
案例5:返回p.getAddress2();
案例6:返回p.getAddress3();
案例7:返回p.getPostcode();
案例8:返回p.getEmpStatus();
案例9:返回p.getSearchStatus();
}
返回null;
}
公共无效设置数据(列表数据){
这个数据=数据;
}
}

如果有人能给我一些建议,我将不胜感激

好的,只需将
Person-getPerson(int-row){return data.get(row);}
添加到表模型中。我不明白具体的问题是什么。封闭类还可以简单地保留对传递给表模型的
数据
列表的引用。获取单击行的索引,将其转换为模型行,并在列表中获取该索引处的人员。我认为问题无疑是一个)糟糕的设计(我试图分离所有内容以更好地了解组件之间的通信的副作用),这就是为什么我不在表视图中简单地使用模型引用,和b)缺乏对表格模型如何工作的真正理解。谢谢,我现在就试试。是的,很好用。我显然没有直截了当地思考。我会怪咖啡太多。谢谢