JTable和构造函数参数

时间:2012-11-13 23:55:59

标签: java swing jtable defaulttablemodel

我正在学习如何在Swing中使用JTable。我已经想出要连接到数据库并检索结果集。我也可以使用第一个选项显示数据(见下文)。

a)我想确保我理解使用/传递TableModel与直接传递行和列的想法是能够使用AbstractTableModel中可用的内置方法; DefaultTableModel和ListTableModel类。

b)什么是自定义TableModel?

到目前为止,我遇到过4种方式:

  1. 将列和行作为对象直接传递给JTable构造函数。
  2. 前:

    JTable tab = new JTable(Object [][] rows, Object[] cols);
    

    2。从实现AbstractTableModel的类创建表模型。

    前:

    MyModel model = new MyModel(Object[][] obj1, String[] header);
    
    //MyModel is a class that extends AbstractTableModel. 
    //MyModel has an ArrayList<Object[]> to store obj1[]
    //MyModel implements getRowCount(), getColumnCount() and 
    getValueAt(int rowIndex, int columnIndex) and also getColumnName(int index)
    
    JTable tab = new JTable(model);
    

    3.从实现DefaultTableModel的类创建表模型。

    前:

    DefaultTableModel model = new DefaultTableModel(String data[][],String col[]);
    (or)
    DefaultTableModel model = DefaultTableModel(Vector data, Vector columnNames) 
    
    JTable table = new JTable(model);
    

    4.ListTableModel

1 个答案:

答案 0 :(得分:3)

当您直接传递数据时,JTable将在内部创建一个DefaultTableModel,您可以通过调用table.getModel()来获取。

不同的TableModel具有不同的功能,您可以通过创建实现TableModel的类或扩展AbstractTableModel(或DefaultTableModel)来实现自己的功能。这背后的想法是,您有时需要的不仅仅是原始表数据。

例如,如果要将Object附加到每一行: 您可以编写一个TableModel,每行包含一个对象,并提供Object getObject(int rowIndex)void setObject(int rowIndex, Object object)等方法。 为此,您将在TableModel中包含一个包含对象的额外数组或列表,并且总是与行数相同。

另一个原因可能是tablemodel在您滚动时加载行数据,或者您希望动态显示来自多个数据源的数据。

TableModel不一定必须保存数据,它只是将它提供给JTable。