java - 更改特定 JTable 单元格中的数据

标签 java swing jtable abstracttablemodel

我为我的 JTable 使用 AbstractTableModel。

public class MyTableModel extends AbstractTableModel {

     private List<String> columnNames = new ArrayList<String>();
     private List<List> data = new ArrayList();

     MyTableModel() {
          columnNames.add("Action");
          columnNames.add("Count");
          columnNames.add("Total");
          columnNames.add("X");
          columnNames.add("Y");
          columnNames.add("Quarter");
          columnNames.add("Answer");
          columnNames.add("T (ms)");
     }

     public void addRow(List rowData) {
          data.add(rowData);
          fireTableRowsInserted(data.size() - 1, data.size() - 1);
     }

     public void insertRow(int index, List rowData) {
          data.add(0, rowData);
          fireTableRowsInserted(data.size() - 1, data.size() - 1);
     }

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

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

     public String getColumnName(int col) {
          try {
               return columnNames.get(col);
          } catch (Exception e) {
               return null;
          }
     }

     public Object getValueAt(int row, int col) {
          return data.get(row).get(col);
     }


     public boolean isCellEditable(int row, int col) {
          return false;
     }

     public Class getColumnClass(int c) {
          return getValueAt(0, c).getClass();
     }     
}

在应用程序运行时,我通过在一些不重要的类中执行一些代码来添加(成功)新行。看起来像这样。

MyClass.MyTableModel.insertRow(0, (Arrays.asList(String.valueOf(valueOne), String.valueOf(valueTwo), String.valueOf(valueThree), 
                    String.valueOf(valueFour), String.valueOf(valueFive), String.valueOf(valueSix), String.valueOf(valueSeven), 
                    String.valueOf(valueEight), String.valueOf(valueNine))));
MyClass.myTable.setModel(MyClass.MyTableModel);
MyClass.myTable.repaint();

但我无法更改此类添加行中特定单元格中的数据。我尝试覆盖 setValueAt() 方法,但没有成功。我还尝试简单地调用 MyClass.MyTableModel 的方法 setValueAt() 例如:

MyClass.MyTableModel.setValueAt("valueChange", 0, 6);
MyClass.myTable.setModel(MyTableModel);
MyClass.myTable.repaint();

这也行不通。我尝试为我的模型调用 f​​ireTableCellUpdated() (我知道这是错误的做法),但尝试也失败了。你有什么想法吗?

最佳答案

您不能重写 setValueAt 方法。默认情况下,此方法不执行任何操作。

例如...

public void setValueAt(Object value, int row, int column) {
    List rowValues = date.get(row);
    rowValues.set(column, value);
    fireTableCellUpdated(row, col);
}

这假设所有列都是可编辑的。通常,我会检查传入的值以确保它是指定列的正确类型,并应用可能需要完成的验证,但我会将其留给您

您可能还想看看How to use tables举几个例子

关于java - 更改特定 JTable 单元格中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146920/

相关文章:

java - 在JTable中设置不同颜色的行?

java - 使用 DefaultTableModel 插入后 JTable 不刷新

Java jTable changeSelection 然后突出显示新的选定行

java - 如何仅使用属性来定位 Selenium 中的元素,而不管属性包含什么值

java - 为什么 SuperDevMode 只提供 LogLevel SEVERE?

java - propertyChangeListener链式 react ,导致溢出

java - 我的列名称没有显示在我的 JTable 中

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 将图像从 C 程序移动到 Java 并显示在屏幕上的最有效方法?

swing - Scala-Swing 中的 MVP