私は複数のJSpinner
に1から10のアイテムと1つのJTable
を持っています。 JSpinner
をクリックすると、値はJTable
に追加されます。私はsetValueAt
でそれを使用できるように行番号を取得したいです。しかし、JSpinner
が2回以上クリックされるとエラーになります。java.lang.ArrayIndexOutOfBoundsException
コード
public void stateChanged(ChangeEvent e) { // when JSpinner clicked
int quantity = (int) ((JSpinner) e.getSource()).getValue();
int rows = table.getRowCount();
for (int i = 0; i < ELEMENTS; i++) {
if (numspinner[i] == e.getSource()) {
if (quantity == 1) {
System.out.println("Row"+rows);
dtm.addRow(new Object[] { foodLabel[i].getText(), quantity, price[i] * quantity });
} else {
System.out.println("Row"+rows);
dtm.setValueAt(quantity, rows, 3);
}
}
}
}
私はもっとして、一度に同じJSpinnerのをクリックすると、この出力
Row1
Row2
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.setValueAt(Unknown Source)
at gui.FoodOrdering.stateChanged(FoodOrdering.java:250)
at javax.swing.JSpinner.fireStateChanged(Unknown Source)
at javax.swing.JSpinner$ModelListener.stateChanged(Unknown Source)
at javax.swing.AbstractSpinnerModel.fireStateChanged(Unknown Source)
at javax.swing.SpinnerNumberModel.setValue(Unknown Source)
at javax.swing.JSpinner.setValue(Unknown Source)
at javax.swing.plaf.basic.BasicSpinnerUI$ArrowButtonHandler.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
任意の助けをいただければ幸いを得ます。
私はいくつかのコードを移動しており、ここで
最新public void stateChanged(ChangeEvent e) {
int quantity = (int) ((JSpinner) e.getSource()).getValue();
int rows = 0;
for (int i = 0; i < ELEMENTS; i++) {
if (numspinner[i] == e.getSource()) {
if (quantity == 1) {
System.out.println("Row"+rows);
rows = table.getRowCount();
dtm.addRow(new Object[] { foodLabel[i].getText(), quantity, price[i] * quantity });
} else {
System.out.println(" The Row"+rows);
dtm.setValueAt(quantity, rows, 1); // obj,column,row
}
}
}
}
量が1である場合、期待どおり、それは行を追加します。同じJSpinnerを再度クリックすると、常に0が表示されます。
:
したがって、このような何かを試してみてください。あなたが3つの行を持っている場合、それらは0として索引付けされます。 1; 2.索引3はありません... –
@ UsagiMiyamoto 2は列だと思いましたか? – Tony
stacktraceは、 'setValueAt()'メソッドが呼び出され、 'Vector.elementAt()'を呼び出すことを示します。これは例外をスローします。カラム値が定数3の 'setValueAt()'メソッドが呼び出されました... –