Java AbstractTableModel教程

Java AbstractTableModel教程,java,abstracttablemodel,Java,Abstracttablemodel,我正在做一个项目,需要在jtable上显示一些数据。我找到了很多关于jtables的教程,但很少有关于如何定制AbstractTableModel的,大部分都是现成的代码。 即使在Oracle的页面上,我也找到了这个通用的jtable教程,但是关于它的信息很少 AbstractTableModel以及如何制作定制模型。 我是编程新手,因此将为我的技能水平提供教程。 感谢您的高级支持。AbstractTableModel包含三个需要覆盖的方法。这些是: public int getRowCount

我正在做一个项目,需要在jtable上显示一些数据。我找到了很多关于jtables的教程,但很少有关于如何定制AbstractTableModel的,大部分都是现成的代码。 即使在Oracle的页面上,我也找到了这个通用的jtable教程,但是关于它的信息很少 AbstractTableModel以及如何制作定制模型。 我是编程新手,因此将为我的技能水平提供教程。
感谢您的高级支持。

AbstractTableModel包含三个需要覆盖的方法。这些是:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);
JTable使用这些方法来确定有多少字段(行和列),并获取每个字段的值(作为类型对象)。覆盖这些方法时,由您决定要使用哪种数据类型。例如,可以使用二维对象数组:

Object[][] data;
或数组的ArrayList:

List<Object[]> data = new ArrayList<Object[]>();
查看的Javadoc以获得其他可覆盖方法的概述

如果希望能够更改TableModel中的数据,则需要覆盖
setValueAt
方法(如果我没有弄错的话):

重要提示:无论何时添加或删除行,TableModel实现中的相应函数都必须调用相应的fireTableRowsInserted(或deleted)函数。否则,您将在JTable上看到奇怪的视觉效果:

public void addRow(Object[] dates) {
    data.add(dates);
    int row = data.indexOf(dates);
    for(int column = 0; column < dates.length; column++) {
        fireTableCellUpdated(row, column);
    }
    fireTableRowsInserted(row, row);
}
public void addRow(对象[]日期){
数据。添加(日期);
int row=data.indexOf(日期);
for(int column=0;column
你通过了吗?是的。是的。我发现它在很大程度上很简单,但关于AbstractTableModel的信息并不多。或者你自己也试过吗?声明您的类(例如MyTableModel),扩展AbstractTableModel,您将看到需要实现哪些方法。他们的名字和返回类型都很简单,应该不会太复杂。谢谢!我尝试了我自己的一个现成的类只是为了做我的项目,但我期待着学习如何正确使用它,这就是为什么我正在寻找一个好的教程,如果它存在!谢谢你,谢谢你的帮助!
void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    //depending on your data structure add the aValue object to the specified
    //rowIndex and columnIndex position in your data object
    //notify the JTable object:
    fireTableCellUpdated(row, col);
}
public void addRow(Object[] dates) {
    data.add(dates);
    int row = data.indexOf(dates);
    for(int column = 0; column < dates.length; column++) {
        fireTableCellUpdated(row, column);
    }
    fireTableRowsInserted(row, row);
}