2016-10-12 17 views
0

最下位行が編集された場合は常に空の行を挿入する方法はありますか?
私はいつも一番下に空いている行を持っていて、誰かが一番下の行を編集すると、新しい行が自動的に挿入されるはずです。最下位行が編集された場合は、空の行をjtableに挿入してください

私はAbstractTableModelにすることを使用

public class NativeTableModel extends AbstractTableModel { 
private static final long serialVersionUID = 1L; 
private ArrayList<Spieler> myObjects = null; 
private String[] columnNames = { "Vorname", "Nachname", "Trikotnummer" }; 

public NativeTableModel() { 
    myObjects = new ArrayList<Spieler>(JNIResultSet.getMeineSpieler()); 
} 

@Override 
public int getRowCount() { 
    return myObjects.size(); 
} 

@Override 
public String getColumnName(int index) { 
    return columnNames[index]; 
} 

@Override 
public int getColumnCount() { 
    return columnNames.length; 
} 

@Override 
public boolean isCellEditable(int row, int col) { 
    boolean retValue = false; 
    if (col >= 1) { 
     retValue = true; 
    } 
    return retValue; 
} 

@Override 
public void setValueAt(Object value, int row, int col) { 
    switch (col) { 
    case 0: 
     if (value instanceof String) { 
      // 
     } 
     break; 
    case 1: 
     if (value instanceof Integer) { 
      // 
     } 
     break; 
    } 
    fireTableCellUpdated(row, col); 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    Object value = ""; 
    Spieler s = this.myObjects.get(rowIndex); 
    switch (columnIndex) { 
    case 0: 
     value = s.getVorname(); 
     break; 
    case 1: 
     value = s.getNachname(); 
     break; 
    case 2: 
     value = s.getTrikotnummer(); 
     break; 
    } 
    return value; 
} 

} 

最下行が空かないと、それは新しい行を挿入空の場合であればどのように確認できますか?

+0

まず、あなたのモデルには、ArrayList 'ではなく、剛性2D配列を使用していますが、RowClassは行情報を保持するクラスです。 –

+0

ハードコードされた配列を使用しているので、rowCountはこの配列の長さに依存しているので、サイズを増やす唯一の方法は、基本的に独自のArrayList機能を作成するために、上記の質問をしています。 –

+0

私は以前に 'ArrayList 'を使用しておらず、その例は動作しています – mafioso

答えて

2

提案:

    はそのデータ核ではなく、柔軟性のない2次元配列としてのArrayListを使用するように、テーブルモデルを変更し
  • ArrayListのジェネリック型は、JTableの1行のデータを保持するクラスである必要があります。
  • データがない行を示す空のデフォルト状態を持つ必要があります。
  • テーブルモデルのメソッドでデータが変更された場合は、モデルの最後の行をチェックして、ここでリストに保持されているオブジェクトがデフォルトかデータを保持しているかどうかを確認します。
  • データが保持されている場合は、新しいオブジェクトをリストに追加し、適切なfireXxx通知メソッドを呼び出します。
  • setValueでは、rowCountを確認することができ、メソッドに渡された行パラメータと比較することができます。一致する場合は、新しい行を追加します。しかし、新しい行を追加するとsetValueも呼び出される可能性があるので循環参照に注意する必要があります。したがって、スタックオーバーフローを防ぐためにロジックを用意する必要があります。また、あなたがSSCCEで働くことができれば、私たちはより良いお手伝いをすることができます。
+0

'setValueAt'メソッドはどのように見えるでしょうか? – mafioso

+0

@mafioso:上記の編集を参照してください –

+0

しかし、私はまだarraylistの値を変更する方法がわかりません – mafioso

関連する問題