jTable
追加しようとしている値がjField
存在するかどうかを確認するにはどうすればよいですか?で使用Vector<Object>
していjTable
ます。
4 に答える
JTable
この機能は提供していません。
JTable
テーブルモデルの視覚化にすぎません。データモデルには、エントリが存在するかどうかを通知するなど、必要なビジネス機能が含まれている必要があります。TableModel
で表示できる内にデータモデルをラップしますJTable
。次に、データモデルのみを操作します。これは、contains
(または同様の)メソッドが存在する必要がある場所です。データモデルがこれである場合、Set
これは組み込まれています。
便宜上、データモデルとTableModel
は同じオブジェクトにすることができますが、適切な場合もあります。しかし、aを使用することVector
は良い考えではありません。悲しいことJTable
に、静的データに対してこれを可能にするいくつかの便利なメソッドがあります。
TableModel
の上に独自のビルドを作成するだけですAbstractTableModel
。JTableチュートリアルを参照してください。
これでうまくいくはずです。
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;
}
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() !
}
}
このように私の質問を達成しました!
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;
}