Java 刷新Jtable内容

Java 刷新Jtable内容,java,swing,jtable,Java,Swing,Jtable,此代码的目的是,在单元格[0,1]中写入内容时,用随机数填充表格; 问题是表不会自动刷新自身。 仅当我移动边框或单击单元格时,表格才会刷新内容 import javax.swing.table.TableModel; public abstract class AbstractTableData implements TableModel{ public static AbstractTableData getTabellaDati(){ throw new Unsuppo

此代码的目的是,在单元格[0,1]中写入内容时,用随机数填充表格; 问题是表不会自动刷新自身。 仅当我移动边框或单击单元格时,表格才会刷新内容

import javax.swing.table.TableModel;

public abstract class AbstractTableData implements TableModel{

    public static AbstractTableData getTabellaDati(){

    throw new UnsupportedOperationException("");

};




    @Override

    abstract public boolean isCellEditable(int rowIndex, int columnIndex);

}
/---------------------------------------------------/

import java.util.Random;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;


public class TableData extends AbstractTableData{
    public static final int N_C = 10;
    public static final int N_R = 10;
    public String[] heading;
    public String[][] data;

    public TableData(String[] h, String[][] data) {
           this.heading = h;
        this.data = data;
    }

    @Override
    public int getRowCount() {
         return heading.length;
    }

    @Override
    public int getColumnCount() {
         return data.length;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return heading[columnIndex];
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
       return "".getClass();
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnsIndex) {
        if (rowIndex == 0) {
            if (columnsIndex == 0) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
       return data[rowIndex][columnIndex];
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        data[rowIndex][columnIndex] = (String)aValue;
        fireTableUpadate(rowIndex, columnIndex);
    }

    @Override
    public void addTableModelListener(TableModelListener l) {

    }

    @Override
    public void removeTableModelListener(TableModelListener l) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private void fireTableUpadate(int rowIndex, int columnIndex) 
    {
        Random ran =new Random();
        for(int i=1;i<N_R;i++)
            for(int j=0;j<N_R;j++)
                data[i][j]=""+ran.nextInt();
    }
    }
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;


public class Test {

    public static void main(String[] args) {
        String[] head = new String[TableData.N_C];
        String[][] data = new String[TableData.N_R][TableData.N_C];

        for (int i = 0; i < TableData.N_C; i++) {
            head[i] = "" + i;
        }
        for (int i = 0; i < TableData.N_R; i++) {
            for (int j = 0; j < TableData.N_C; j++) {
                data[i][j] = "";
            }
        }

        data[0][0]="->";
        JTable table = new JTable(data, head);
        table.setModel(new TableData(head,data));
        JPanel panel = new JPanel();
        JFrame frame = new JFrame();
        frame.add(panel.add(table));
        frame.setSize(1000, 380);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
import java.util.Random;
导入javax.swing.event.TableModelListener;
导入javax.swing.table.TableModel;
公共类TableData扩展了AbstractTableData{
公共静态最终整数N_C=10;
公共静态最终整数N_R=10;
公共字符串[]标题;
公共字符串[][]数据;
公共表数据(字符串[]h,字符串[]数据){
这个标题=h;
这个数据=数据;
}
@凌驾
public int getRowCount(){
返回标题。长度;
}
@凌驾
public int getColumnCount(){
返回数据长度;
}
@凌驾
公共字符串getColumnName(int columnIndex){
返回标题[列索引];
}
@凌驾
公共类getColumnClass(int columnIndex){
返回“.getClass();
}
@凌驾
公共布尔值可编辑(int行索引、int列索引){
如果(行索引==0){
if(columnsIndex==0){
返回false;
}否则{
返回true;
}
}否则{
返回false;
}
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
返回数据[rowIndex][columnIndex];
}
@凌驾
public void setValueAt(对象有效、int行索引、int列索引){
数据[rowIndex][columnIndex]=(字符串)aValue;
fireTableUpadate(行索引、列索引);
}
@凌驾
公共void addTableModelListener(TableModelListener l){
}
@凌驾
公共void removeTableModelListener(TableModelListener l){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
私有void fireTableUpadate(int行索引、int列索引)
{
Random ran=新的Random();

对于(int i=1;iYou。在上面的链接中有更多详细信息。完全错误(假设模型是一种TableModel):a)addTableModelListener的空实现(根据需要阻止通知)b)在一次更新中触发多个事件-arrrgghh误读FireTablea更新:您似乎在随机更改基础数据结构。顺便说一句:什么是AbstractTableData?无论如何,请先阅读一篇关于JTable/TableModel如何协同工作的教程,f.i.swing标记wiki中引用的教程。好的,我知道我有e以在TableData中实现addTableModelListener,但是我错过了您的第二个建议add@kleopatra(或者任何人,
@
很重要)通知他们新的注释。