有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用setValueAt更新JTable

我有一个从AbstractTableModel创建的JTable。我正在屏幕上成功初始化表格。(这只是一个信息表-单击被禁用)当我从JTable对象调用setValueAt时,什么都不会发生

非常感谢您的帮助! 提前谢谢

public void initialiseAuxDataStructure(TableModel table) {
    JTable auxDS = new JTable(table);
    Font f = auxDS.getFont();
    auxDS.setFont(new Font(f.getFontName(), f.getStyle(), f.getSize()+2));
    auxDS.setFocusable(false);
    auxDS.setRowSelectionAllowed(false);

    JTableHeader header = auxDS.getTableHeader();
    f = header.getFont();
    header.setFont(new Font(f.getFontName(), Font.BOLD, f.getSize()+2));

    pnlCenter.add(new JScrollPane(auxDS), BorderLayout.CENTER);
    pnlCenter.revalidate();

}

public void updateTable(String value, int row, int col) {
    auxDS.setValueAt(value, row, col);
    auxDS.revalidate();
}

抽象表模型为:

公共类TableModel扩展了AbstractTableModel{

private String[] columnNames;
private Object[][] data;

public TableModel(String[] columnNames, int columns) {
    this.columnNames = columnNames;
    data = new Object[columns][columnNames.length];
    for (int i=0; i<columns;i++) {
        data[i][0] = i;
    }
}

public TableModel(String[] colNames, Object[][] startData){
    this.columnNames = colNames;
    this.data = startData;
}

public int getColumnCount() {
    return columnNames.length;
}

public int getRowCount() {
    return data.length;
}

public String getColumnName(int col) {
    return columnNames[col];
}

public Object getValueAt(int row, int col) {
    return data[row][col];
}

}


共 (1) 个答案

  1. # 1 楼答案

    我在评论中给了你答案

    您没有实现setValueAt()方法,因此什么也没有发生

    您可以阅读jtableapi,并按照链接到How to Use Tables上的Swing教程,在那里您可以找到一个简单的实现

    或者您可以使用DefaultTableModel,它已经为您完成了这项工作