我在使用JTable时遇到了问题。这是通过一个线程运行的,我希望JTable能够更新每个tick的值。值(来自物理)会在每个刻度处更新。我尝试过使用
SpecialTable.repaint();
SpecialTable.revalidate();
显然什么也没做。我也尝试过在其他线程中建议的SpecialTable.fireTableDataChanged():JTable How to refresh table model after insert delete or update the data.。 自fireTableDataChanged()以来,这也没有做任何事情;未定义JTable。如果我尝试投射它:
((AbstractTableModel) SpecialTable).fireTableDataChanged()
我得到一个编译器错误:未解决的编译问题: 无法从JTable转换为AbstractTableModel
我还尝试通过为我的JPanel类创建一个remakeTable方法重新初始化JTable,并在每个tick中调用一个方法,但它也没有做任何事情。
class SpecialTable extends AbstractTableModel {
Model physics;
Object[][] partikelinfo = new Object[10][4];
String[] columns = new String[4];
SpecialTable(Model m){
this.physics = m;
LinkedList<Particle> partiklar = physics.getParticles();
String[] tmp = { "Particle no.", "Coordinates", "Moving",
"Tracking" };
for (int i = 0; i < tmp.length; i++) {
Arrays.fill(columns, i, i+1, tmp[i]);
}
Object[][] tmp2 = {
{ "1", partiklar.get(1).y + " , " + partiklar.get(1).x,
partiklar.get(1).isMoving, new Boolean(true) },
{ "2", partiklar.get(2).y + " , " + partiklar.get(2).x,
partiklar.get(2).isMoving, new Boolean(true) },
{ "3", partiklar.get(3).y + " , " + partiklar.get(3).x,
partiklar.get(3).isMoving, new Boolean(true) },
{ "4", partiklar.get(4).y + " , " + partiklar.get(4).x,
partiklar.get(4).isMoving, new Boolean(true) },
{ "5", partiklar.get(5).y + " , " + partiklar.get(5).x,
partiklar.get(5).isMoving, new Boolean(true) },
{ "6", partiklar.get(6).y + " , " + partiklar.get(6).x,
partiklar.get(6).isMoving, new Boolean(true) },
{ "7", partiklar.get(7).y + " , " + partiklar.get(7).x,
partiklar.get(7).isMoving, new Boolean(true) },
{ "8", partiklar.get(8).y + " , " + partiklar.get(8).x,
partiklar.get(8).isMoving, new Boolean(true) },
{ "9", partiklar.get(9).y + " , " + partiklar.get(9).x,
partiklar.get(9).isMoving, new Boolean(true) },
{ "10", partiklar.get(10).y + " , " + partiklar.get(10).x,
partiklar.get(10).isMoving, new Boolean(true) }
};
for (int i = 0; i < tmp2.length; i++) {
Arrays.fill(partikelinfo, i, i+1, tmp2[i]);
}
}
public int getColumnCount() {
return columns.length;
}
public int getRowCount() {
return partikelinfo.length;
}
public String getColumnName(int col) {
return columns[col];
}
public Object getValueAt(int row, int col) {
return partikelinfo[row][col];
}
public Class<? extends Object> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public void setValueAt(Object value, int row, int col) {
partikelinfo[row][col] = value;
fireTableCellUpdated(row, col);
}
public boolean isCellEditable(int row, int col) {
if (col < 3) {
return false;
} else {
return true;
}
}
//Don't know how to call this || if it works.
public void updateValues(){
fireTableDataChanged();
}
}
我不知道问题在于SpecialTable是否没有获得更新的值,或者他们是否只是不显示或是否有第三种选择。