【发布时间】:2017-08-27 15:31:04
【问题描述】:
我有多个 JSpinner,其中包含项目 1-10 和一个 JTable。单击JSpinner 时,该值将添加到JTable。我想获取行号,以便可以在setValueAt 使用它。但是当JSpinner 多次点击时,我得到了错误。
代码
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!!!
【问题讨论】:
-
对于从零开始的索引,如
JTable/TableModel,getRowCoun()返回的行数大于最后一行的索引。 EG 如果你有 3 行,它们的索引为 0; 1个; 2.没有索引3... -
@UsagiMiyamoto 我以为 2 是列?
-
stacktrace 显示,
setValueAt()方法被调用,它正在调用Vector.elementAt(),这会引发异常。setValueAt()方法被调用,列值为常量 3... -
@UsagiMiyamoto 我该如何解决?我点击了同一个 JSpinner 两次,我退出第 1 行、第 2 行,然后崩溃了
-
似乎在您第一次点击时,它会添加新行,但在您第二次点击时,它会尝试修改行索引 2 处的单元格..
标签: java arrays jtable setvalue