2011-02-09 39 views
0

更新表GUI我创建了一个使用下面的语法显示表一个Java GUI:扩展定制AbstractTableModel上

table = new JTable(new MyTableModel(columnNames, 
            updateTable(cmbAdversary.getSelectedItem().toString(), 
               cmbdataType.getSelectedItem().toString()))); 

其中COLUMNNAMES是字符串 cmbadversary和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); 
    } 

} 

问题是,当我运行代码时,表格GUI向我显示初始值,但在更改2个组合框中的选择并单击选择按钮时无法更新。 “选择”按钮btw调用实现动作侦听器的方法。

请帮我一把。我不喜欢Java,但愿意学习。如果您有任何后续服务,我会很乐意提供详细信息。

+0

那么,你的ActionListener-Method是什么?它是否简单地调用`updateTable()`,但是对结果没有任何作用? – 2011-02-09 14:05:52

回答

1

您的解决方案看起来过于复杂。如果我了解基本知识,用户将从组合框中选择一个值,然后根据选择将一些数据加载到表中。

有没有必要创建一个自定义表模型来做到这一点。

TableModel包含数据。如果你想改变数据,那么一种方法是简单地创建一个新的TableModel。所以你添加一个ActionListener到你的组合框。选择某个项目时,可以回顾数据并将数据加载到Vector或Array中。使用这个数据,您可以在两行代码创建一个新的TableModel和更新的JTable:

DefaultTableModel model = new DefaultTableModel(...); 
table.setModel(model); 

如果您需要自定义模型覆盖的getColumnClass()或的isCellEditable()方法,那么你应该延长的DefaultTableModel。我认为没有必要实施整个模式。

+0

谢谢。你的方法就是我最终遵循的方法,它对我有用。 – Nir 2011-02-15 17:27:48