2017-03-11 1 views
0

デフォルト値のJTable 4x4があります。ユーザーはJTableのサイズを変更できます。サイズを例えばに変更した後。 6x6では、デフォルト値がクリアされ、ユーザーは独自の値を入力できます。いくつかの整数テーブルにそれらを取得する方法?私はモデルクラスからgetValueAt()とsetValueAt()を使用しようとしていましたが、JTableフィールドは他のいくつかのセルをクリックすると常にクリアされていました。サイズ変更可能なJTableから値を取得する方法

class MyTableModel extends AbstractTableModel { 

int size; 
private String[] columnNames = { "Stan 1", "Stan 2", "Stan 3", "Stan 4" }; 

private Object[][] defaultValues = new Object[][] { 
     { "5", "15", "10", "0"}, 
     { "10", "10", "-20", "30"}, 
     { "40", "0", "50", "-30"}, 
     { "60", "0", "20", "-10"}}; 

private Object[][] newData = null; 

public MyTableModel(int x) { 
    size = x; 
} 

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

@Override 
public int getColumnCount() { 
    return size; 
} 

@Override 
public String getColumnName(int columnIndex) { 
    if(columnIndex == 0) return null; 
    else return "Stan " + Integer.toString(columnIndex); 
} 

@Override 
public Class getColumnClass(int columnIndex) { 
    return Integer.class; 
} 

@Override 
public boolean isCellEditable(int rowIndex, int columnIndex) { 
    return true; 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    if(size == 4) 
     return defaultValues[rowIndex][columnIndex]; 
    else { 
     newData = new Object[size][size]; 
     return newData[rowIndex][columnIndex]; 
    } 
} 

@Override 
public void setValueAt(Object value, int rowIndex, int columnIndex) { 
    if(size == 4) 
     defaultValues[rowIndex][columnIndex] = value; 
    else 
     newData[rowIndex][columnIndex] = value; 

    fireTableCellUpdated(rowIndex, columnIndex); 
} 
} 
+0

有効な[mcve]を投稿して、自分でコードを実行してテストできるようにしてください。これは、コード形式のテキストとしてこのサイトに投稿するのに十分な小さなプログラムでなければなりません。コンパイルして実行し、問題を表示してください。 –

答えて

1

getValueAt(...)とのsetValueAt(...)メソッドをオーバーライドするカスタムのTableModelが必要かはありません。

DefaultTableModelのデータを変更する場合は、setDataVector(...)メソッドを使用してください。

関連する問題