0
2列の列が編集されたときに列データの1つを変更しようとすると、stackoverflowエラーが発生します。JTable setvalueat stackoverflow
私はitems, quantity, price
の3つの列を持っています。
商品と数量が入力されている場合に価格を計算したいと考えています。以下は私のコードです: -
itemsTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
for (int i = 0; i < itemsTable.getRowCount(); i++) {
if (itemsTable.getValueAt(i, 0) != null) {
String item = itemsTable.getValueAt(i, 0).toString();
double price = Double.parseDouble(selectedItem.substring(item.indexOf("RM") + 2, item.length())); //get price from the cell
double qty = Double.parseDouble(itemsTable.getValueAt(i, 1).toString()); //get quantity from cell
itemsTable.setValueAt(price * qty, i, 2); //calculate price * qty and set price
}
}
}
});
私は私が間違って何をやっているquantity
ためitems
列とするJSpinnerにデータベースのデータをロードコンボボックスを設定しますか?私はJTableが初めてです。
回答:(テトスへのクレジット)も
@Override
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE && e.getColumn() != 2) {
for (int i = 0; i < itemsTable.getRowCount(); i++) {
if (itemsTable.getValueAt(i, 0) != null) {
...
}
}
}
}
1)あなたのメソッドは、テーブルのデータが変更されたときに呼び出されます。 2)次に、メソッド内でテーブルのデータを変更します。これは1)につながる。コールスタックにスペースがなくなるまで、メソッドは再帰的に呼び出されます。 – f1sh
だから、どうすれば欲望の結果を達成できますか?どのようにしてそれを行う適切な方法は何ですか? –
「価格」の値を設定することによってトリガされる変更イベントを無視するために、 'if(e.getColumn()!= 2){...} 'のようなチェックを追加できます。 "Price"カラムの値が 'if(itemsTable.getValueAt(i、0)== null)'に設定されているかどうかを確認することもできます。 – Titus