更新并重新绘制JTable

时间:2016-02-25 19:38:30

标签: java swing jtable jpanel

我在使用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是否没有获得更新的值,或者他们是否只是不显示或是否有第三种选择。

0 个答案:

没有答案