【发布时间】:2013-12-07 21:52:56
【问题描述】:
我的自定义表格模型中出现了无限循环。创建表后,此类中的两个 println 语句会重复打印出来。为什么会这样?
此外,还有其他 println 语句应该执行,但不执行,即使它们正在监视的功能确实发生了。
package client.mainwindow;
import javax.swing.table.AbstractTableModel;
public class IndexerTableModel extends AbstractTableModel {
private BatchState bs;
public IndexerTableModel(BatchState bs){
this.bs = bs;
}
@Override
public int getColumnCount(){
int count = bs.getDlr().getNumFields() + 1;
System.out.println("getColumnCount");//HERE
return count;
}
@Override
public String getColumnName(int column){
String result = null;
if(column == 0){
result = "Record Number";
}else if(column >= 0 && column < getColumnCount()){
result = bs.getDlr().getTitles().get(column - 1);
}
return result;
}
@Override
public int getRowCount() {
return bs.getDlr().getNumRecords();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object result = null;
if(isCellEditable(rowIndex, columnIndex)){
Cell cell = new Cell(rowIndex, columnIndex);
result = bs.getValue(cell);
}else if(columnIndex == 0){
for(int i = 0; i<getRowCount(); i++){
setValueAt(i, i, 0);
}
}
System.out.println("getValueAt");//HERE
return result;
}
@Override
public void setValueAt(Object value, int row, int column){
if(isCellEditable(row, column)){
Cell cell = new Cell(row, column);
bs.setValue(cell, value);
}
this.fireTableCellUpdated(row, column);
}
@Override
public boolean isCellEditable(int row, int column){
boolean edible = false;
if(column == 0 && column < getColumnCount() && row >= 0 && row < getRowCount())
edible = false;
else if(column > 0 && column < getColumnCount() && row >= 0 && row < getRowCount())
edible = true;
return edible;
}
}
【问题讨论】:
标签: java swing jtable infinite-loop