如何检查jTable中是否存在我要添加的值?

时间:2013-03-26 14:29:32

标签: java swing jtable

如何检查jTable我想要从jField添加的值是否存在?我在Vector<Object>中使用jTable

4 个答案:

答案 0 :(得分:1)

JTable不提供此功能。

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

为方便起见,数据模型和TableModel可以是同一个对象,有时它是合适的。但只使用Vector并不是一个好主意。遗憾的是JTable有一些方便的方法可以用于静态数据。

只需在TableModel之上构建自己的AbstractTableModel即可。请参阅JTable tutorial

答案 1 :(得分: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() !

  }

}

答案 2 :(得分: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;
}

答案 3 :(得分:1)

这应该这样做。

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;
}