2

如何检查jTable我尝试添加的值是否jField存在?我正在使用Vector<Object>.jTable

4

4 回答 4

2

JTable不提供此功能。

JTable只是表模型的可视化。您的数据模型应该具有您需要的业务功能,例如告诉您是否存在条目。您将数据模型包装在TableModel可以由JTable. 然后,您只需操作您的数据模型。这是contains应该存在(或类似)方法的地方。如果您的数据模型是Set内置的。

为方便起见,数据模型和TableModel可以是同一个对象,有时它是合适的。但是仅仅使用 aVector并不是一个好主意。可悲的是JTable,有一些方便的方法允许对静态数据进行此操作。

只需TableModelAbstractTableModel. 请参阅JTable 教程

于 2013-03-26T14:46:22.810 回答
2

这应该这样做。

public boolean existsInTable(JTable table, Object[] entry) {

    // Get row and column count
    int rowCount = table.getRowCount();
    int colCount = table.getColumnCount();

    // Get Current Table Entry
    String curEntry = "";
    for (Object o : entry) {
        String e = o.toString();
        curEntry = curEntry + " " + e;
    }

    // Check against all entries
    for (int i = 0; i < rowCount; i++) {
        String rowEntry = "";
        for (int j = 0; j < colCount; j++)
            rowEntry = rowEntry + " " + table.getValueAt(i, j).toString();
        if (rowEntry.equalsIgnoreCase(curEntry)) {
            return true;
        }
    }
    return false;
}
于 2015-06-02T09:14:37.217 回答
1

Vector<Object>为 JTable 制作了一个非常糟糕的模型!

您应该编写自己的模型类,可能从 javax.swing.table.AbstractTableModel 派生,类似于

public class FooModel extends javax.swing.table.AbstractTableModel {

  // AbstractTableModel
  public int getRowCount() { //TBD }

  public int getColumnCount() { //TBD } 

  public Object getValueAt(int row, int column) { //TBD }

  // Insert a value into model only if not exists yet

  public void insertData(String something) throws AlreadyExistsException {

      // Check if element already in model
      // Either throw exception or update model
      // Dont forget to call fireTableRowsInserted() !

  }

}

于 2013-03-26T14:54:25.443 回答
1

像这样完成了我的问题!

private boolean isEntry(String name, String size) {
    int rowCount = jTable.getRowCount();
    String row = null, tname = null, tsize = null, input = name + "|" + size;
    for (int i = 0; i < rowCount - 1; i++) {
        tname = (String) jTable.getValueAt(i, 0);
        tsize = (String) jTable.getValueAt(i, 2);
        row = tname + "|" + tsize;
        if (input.equalsIgnoreCase(row)) {
            return true;
        }
    }
    return false;
}
于 2013-03-27T13:49:55.127 回答