gpt4 book ai didi

java - Jtable 未使用我的 Abstracttablemodel 进行更新

转载 作者:行者123 更新时间:2023-12-02 07:09:19 25 4
gpt4 key购买 nike

我是编程新手,正在完成我的第一份学校作业。我编写了一个 GUI,它接受输入并将 jtable 中的数据输出到添加到 jpaddedpane 中。当表格第一次出现时,它显示所有正确的数据。但是当我输入新的输入时,表格不会更新。我几乎肯定问题出在我的 AstractTableModel 实现上。有人可以看一下并尽快帮我改正吗?提前致谢。

ps。 nh、vh、hNam、proc_1 和 proc_ 分别是整数、字符串、整数、字符串和字符串数组。它们保存要在表中显示的数据。

 public class TableModel extends AbstractTableModel  {
int numRows;
String colNames[] = { "NH", "Horse Names", "VH",
"Proc. I", "Proc. II" };
Object[][] obj;

TableModel() {
super();
numRows = fnh;
obj = new Object[fnh][5];

for( int i = 0; i < fnh; i++ ) {
for ( int j = 0; j < 5; j++ ) {
if ( j == 0 )
obj[i][0] = (Integer)nh[i];
else if ( j == 1 )
obj[i][1] = (String)hNam[i];
else if ( j == 2 )
obj[i][2] = (Integer)vh[i];
else if ( j == 3 )
obj[i][3] =(String)proc_1[i];
else
obj[i][4] =(String)proc_2[i];
}
}
}

@Override
public int getRowCount() {
return numRows;
}

@Override
public int getColumnCount() {
return 5;
}

@Override
public String getColumnName( int c ) {
return colNames[c];
}

@Override
public Object getValueAt( int r, int c ) {
if ( c == 0 )
return nh[r];
else if ( c == 1 )
return hNam[r];
else if ( c == 2 )
return vh[r] ;
else if ( c == 3 )
return proc_1[r];
else
return proc_2[r];
}

@Override
public boolean isCellEditable( int r, int c ) {
return true;
}

public void setValueAt( Object[][] value, int r, int c ) {
value = obj;
fireTableCellUpdated( r, c );
}

}
}

最佳答案

这就是问题所在value = obj;

setValueAt 方法中,您没有将值设置为相应的 obj 值。访问 getValueAt 的方式类似地将获得的值设置为相应的数组位置。

使用ArrayList而不是使用数组。您可以轻松访问所有方法。

class TableData {       
private String name;
private String grade;
private String subject;
private String staff;
// Add getters and setters.
}

这是使用 ArrayList 的 TableModel 示例。

class AllTableModel extends AbstractTableModel {

List<TableData> tableData = new ArrayList<TableData>();

Object[] columnNames = {"Name", "Grade", "Subject", "Staff"};

public AllTableModel(List<TableData> data) {

tableData = data;
}

public List<TableData> getTableData() {
return tableData;
}

@Override
public String getColumnName(int column) {
return columnNames[column].toString();
}

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

@Override
public int getRowCount() {
return tableData.size();
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TableData data = tableData.get(rowIndex);
switch (columnIndex) {
case 0:
return data.getName();
case 1:
return data.getGrade();
case 2:
return data.getSubject();
case 3:
return data.getStaff();
default:
return null;
}
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
TableData data = tableData.get(rowIndex);
switch (columnIndex) {
case 0:
data.setName(aValue == null ? null : aValue.toString());
case 1:
data.setGrade(aValue == null ? null : aValue.toString());
case 2:
data.setSubject(aValue == null ? null : aValue.toString());
case 3:
data.setStaff(aValue == null ? null : aValue.toString());
}
}

}

关于java - Jtable 未使用我的 Abstracttablemodel 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com