Java 更新扩展自定义AbstractTableModel的表GUI
我创建了一个Java GUI,它使用以下语法显示表:Java 更新扩展自定义AbstractTableModel的表GUI,java,abstracttablemodel,Java,Abstracttablemodel,我创建了一个Java GUI,它使用以下语法显示表: table = new JTable(new MyTableModel(columnNames, updateTable(cmbAdversary.getSelectedItem().toString(), cmbdataType.getSelectedItem().toStr
table = new JTable(new MyTableModel(columnNames,
updateTable(cmbAdversary.getSelectedItem().toString(),
cmbdataType.getSelectedItem().toString())));
其中columnNames是字符串的向量
CMB敌手和smbdataType是选择od组合框
updateTable是一种根据组合框选择返回向量向量的方法,如下所示:
static Vector updateTable(String FilterVal1 , String FilterVal2)
{
try {
myVector = tssc.testSeverityFunctionService(FilterVal1,FilterVal2);
} catch (Exception e) {
e.printStackTrace();}
return myVector;
}
这就是扩展AbstractTableModel的自定义类MyTableModel的外观:
class MyTableModel extends AbstractTableModel
{
Vector columnNames = new Vector();
Vector Fdb = new Vector();
public MyTableModel(Vector cName,Vector rName){
this.columnNames = cName;
this.Fdb = rName;}
public int getColumnCount() { // number of columns in the model.
return columnNames.size();
}
public int getRowCount() { // number of rows in the model.
return Fdb.size();
}
@Override
public String getColumnName(int col) {
return columnNames.get(col).toString();
}
public Object getValueAt(int row, int col) {
Vector v = (Vector) this.Fdb.get(row);
return v.get(col);
}
@Override
public Class getColumnClass(int c) {
Vector v = (Vector) Fdb.get(0);
return v.get(c).getClass();}
public boolean isCellEditable(int row, int col)
{ return true; }
public void setValueAt(Vector value, int row, int col)
{
for(int i=0;i<value.size();i++)
{ for(int j=0;j<columnNames.size();j++) {
Fdb.setElementAt(value.get(j),j); }
}
fireTableCellUpdated(row, col);
}
}
类MyTableModel扩展了AbstractTableModel
{
向量列名称=新向量();
向量Fdb=新向量();
公共MyTableModel(向量cName、向量rName){
this.columnNames=cName;
this.Fdb=rName;}
public int getColumnCount(){//模型中的列数。
返回columnNames.size();
}
public int getRowCount(){//模型中的行数。
返回Fdb.size();
}
@凌驾
公共字符串getColumnName(int-col){
返回columnNames.get(col.toString();
}
公共对象getValueAt(整数行,整数列){
向量v=(向量)this.Fdb.get(行);
返回v.get(col);
}
@凌驾
公共类getColumnClass(int c){
向量v=(向量)Fdb.get(0);
返回v.get(c).getClass();}
公共布尔值可编辑(int行,int列)
{返回true;}
public void setValueAt(向量值、整行、整列)
{
对于(int i=0;i您的解决方案似乎过于复杂。如果我了解基本知识,用户将从组合框中选择一个值,然后根据选择将一些数据加载到表中 不需要创建自定义表模型来执行此操作 TableModel包含数据。如果要更改数据,一种方法是创建一个新的TableModel。因此,可以在组合框中添加一个ActionListener。选择某个项目后,可以检索数据并将数据加载到向量或数组中。使用此数据,可以创建一个新的TableModel并在两行中更新JTable代码:
DefaultTableModel model = new DefaultTableModel(...);
table.setModel( model );
如果需要自定义模型以覆盖getColumnClass()或isCellEditable()方法,那么应该扩展DefaultTableModel。我认为没有必要实现整个模型。那么,ActionListener方法是什么?它只是调用
updateTable()吗
,但对结果没有任何影响?谢谢。你的方法就是我最终遵循的方法,它对我有效。