Vag*_*ism 3 java abstracttablemodel
我正在开发一个需要在jtable上显示一些数据的项目.我发现了许多关于jtables的教程,但很少有关于如何自定义AbstractTableModel的教程,大多数部分都是现成的代码.即使在Oracle的页面中,我也发现了这个通用的jtable教程,但很少有关于AbstractTableModel的信息以及如何制作自定义模型.Oracle Jtable教程 我是编程新手,因此我将为我的skils级别提供一个教程.先谢谢你.
lan*_*oxx 19
AbstractTableModel包含三个需要覆盖的方法.这些是:
public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);
Run Code Online (Sandbox Code Playgroud)
JTable使用这些方法来找出有多少字段(行和列),并获取每个字段的值(作为Object类型).覆盖这些方法时,您需要使用哪种数据类型.例如,您可以使用二维Object数组:
Object[][] data;
Run Code Online (Sandbox Code Playgroud)
或ArrayList或Hashtable:
List<Object[]> data = new ArrayList<Object[]>();
Run Code Online (Sandbox Code Playgroud)
修复大小的数组可能更容易使用,但动态添加值更加困难.当然,您也可以使用地图或其他数据结构.您只需调整上述三种方法的实现,即可从数据结构中返回正确的信息,例如模型当前包含的行数等.
还有一些方法可以覆盖,但不必如此,例如,如果您想要自定义列名,则必须另外覆盖该public String getColumnName(int col)方法.例如这样:
private static final String[] COLUMN_NAMES = {"User", "Password", "Age"};
public String getColumnName(int col) {
return COLUMN_NAMES[col];
}
Run Code Online (Sandbox Code Playgroud)
查看用于AbstractTableModel的Javadoc,以获得可以覆盖的其他方法的概述.
如果您希望能够更改TableModel中的数据,则需要覆盖该setValueAt方法(如果我没有记错的话):
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);
}
Run Code Online (Sandbox Code Playgroud)
要点:每当添加或删除行时,TableModel实现中的相应函数都必须调用相应的fireTableRowsInserted(或删除)函数.否则你会看到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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14696 次 |
| 最近记录: |