2

jTable追加しようとしている値がjField存在するかどうかを確認するにはどうすればよいですか?で使用Vector<Object>していjTableます。

4

4 に答える 4

2

JTableこの機能は提供していません。

JTableテーブルモデルの視覚化にすぎません。データモデルには、エントリが存在するかどうかを通知するなど、必要なビジネス機能が含まれている必要があります。TableModelで表示できる内にデータモデルをラップしますJTable。次に、データモデルのみを操作します。これは、contains(または同様の)メソッドが存在する必要がある場所です。データモデルがこれである場合、Setこれは組み込まれています。

便宜上、データモデルとTableModelは同じオブジェクトにすることができますが、適切な場合もあります。しかし、aを使用することVectorは良い考えではありません。悲しいことJTableに、静的データに対してこれを可能にするいくつかの便利なメソッドがあります。

TableModelの上に独自のビルドを作成するだけですAbstractTableModelJTableチュートリアルを参照してください。

于 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 に答える