java - jTable 单元格不改变

标签 java swing jtable tablemodel

我正在使用 java 和 mySQL 制作一个数据库管理系统。我使用 jTable 作为数据库的接口(interface)。

虽然帖子看起来不长,但对于有经验的人来说,问题不会那么复杂(我猜)。

这是我的问题。选择一个单元格后,我可以输入值(没有问题)。但是在输入值后,当我点击其他单元格时,输入的值消失并返回 null。

想不通原因。我对 jTables 没有太多经验。但我认为问题出在表格模型上。

这是我的表格模型

import Templates.TableEntry;
import java.util.LinkedList;
import javax.swing.table.AbstractTableModel;

public class myTableModel extends AbstractTableModel {

public static final int DATE_INDEX = 0;
public static final int ORDERNO_INDEX = 1;
public static final int ROOT_INDEX = 2;
public static final int HIDDEN_INDEX = 3;
public String[] columnnames;
public LinkedList<TableEntry> entryList;

public myTableModel(String[] columnNames) {
    this.columnnames = columnNames;
    entryList = new LinkedList<TableEntry>();
}

@Override
public String getColumnName(int column) {
    return columnnames[column];
}

@Override
public boolean isCellEditable(int row, int column) {
    if (column == HIDDEN_INDEX) {
        return false;
    } else {
        return true;
    }
}

@Override
public Class getColumnClass(int column) {
    return String.class;
}

@Override
public String getValueAt(int row, int column) {
    TableEntry record = entryList.get(row);
    switch (column) {
        case DATE_INDEX:
            return record.date;
        case ORDERNO_INDEX:
            return record.jobOdrerNo;
        case ROOT_INDEX:
            return record.rootCardNos;
        default:
            return null;
    }
}

public void setValueAt(String value, int row, int column) {
    TableEntry record = entryList.get(row);
    switch (column) {
        case DATE_INDEX:
            record.date = value;
            break;
        case ORDERNO_INDEX:
            record.jobOdrerNo = value;
            break;
        case ROOT_INDEX:
            record.rootCardNos = value;
            break;
        default:
            System.out.println("invalid index");
    }
    updateTable(row, column);
}

public void updateTable(int row, int column) {
    fireTableCellUpdated(row, column);
}

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

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

public boolean hasEmptyRow() {
    if (entryList.size() == 0) {
        return false;
    }
    TableEntry entry = entryList.get(entryList.size() - 1);
    if ("".equals(entry.date)) {
        return true;
    } else {
        return false;

    }
}

public void addEmptyRow() {
    entryList.add(new TableEntry());
    fireTableRowsInserted(entryList.size() - 1, entryList.size() - 1);
}

public void deleteRow(int i) {
    if (i != 0) {
        entryList.remove(i);
        fireTableRowsDeleted(i - 1, i + 1);
    }
}

对长度感到抱歉。但为了完整起见,我发布了整个代码。大部分可以忽略不计。

TableEntry 是一个简单的类。

package Templates;

public class TableEntry {

public String date;
public String jobOdrerNo;
public String rootCardNos;
public String yardRootCard;
public String MCISO_NO;
public String service_maintenance_breakdown;
public String jobNo;
public String machineName;
public String fault;
public String problematicPart;
public String person;
public String action;
public String startTime;
public String finishedTime;
public String durationOfRepair;
public String spareParts;
public String itemCode;
public String no;
public String value;
public String totalCost;
public String remark;
public String breakdownAndSolution;

希望我已经提供了所有详细信息。这对我来说是一个真正的错误。任何帮助表示赞赏。 提前致谢...!

(如果需要任何说明,请告诉我..很难发布整个项目。它有点庞大..:D)

最佳答案

您的代码中有一个小错误。下次小心点..

在表模型的方法“setValueAt(---)”中,您输入了错误的参数。您试图覆盖类“AbstractTableModel”的方法。原来的方法是,

public void setValueAt(Object aValue, int rowIndex, int columnIndex){
}

但是你把你的方法写成,

public void setValueAt(String value, int row, int column) {
...//method body
}

因此,它不会覆盖预期的功能。每次更改单元格时,tablemodel 都会调用原始的“setValueAt(...)”函数。但是因为它没有被覆盖,所以它什么都不做(你必须覆盖它,原来的方法没有主体)。

希望这有帮助..

关于java - jTable 单元格不改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11625699/

相关文章:

java - 如何正确处理if条件下的java变量

java - 如何在一个JFrame中多次添加一张图片?

java - 如何在单击 JButton 后添加显示 "OK"和 "Cancel"的面板?

java - 如何创建自定义按钮形状类

java - 检查 ArrayList 中对象变量的方法

java - 如何将对象参数与​​另一个对象参数(数组内)进行比较

java - 如何删除 JTable Java 中的空行

java - 如何使用 TableModel 在 JTable 中渲染组件?

java - Jtable 行删除

java - 动态添加列到 JTable