[英]Java Jtable error with setting a value to a column after listener runs
我正在为JTable开发TableModelListener。 现在,jtable可以得到很好的值。 但是当涉及到设置所选行的最后一列的值时。 它变得不稳定,不确定是什么错误挂断了。 在netbeans上没有看到任何错误,因此不确定要怎么做。 因此,我什至不确定if语句是否在设置值方面完全起作用。 我应该使用或做其他事情来做到这一点吗? 更新:看来确实是一个无限循环。 将代码编辑为建议,以检查更新表事件,但仍然存在相同的问题。 这是下面的代码:
public class MyListener implements TableModelListener {
@Override
public void tableChanged(TableModelEvent tme) {
if (tme.getType() == TableModelEvent.UPDATE)
{
int rowcount = jDetailSubmitTable.getSelectedRow();
// Initial return when table is starting to be filled.
if(rowcount == -1 )
{
return;
}
int com = tme.getColumn();
// Number being Validated.
if(jDetailSubmitTable.getModel().getValueAt(rowcount, com).toString().trim().isEmpty())
{
JOptionPane.showMessageDialog(null, "Invaid Number selected.");
jDetailSubmitTable.getModel().setValueAt("0", rowcount, com);
return;
}
try
{
Double.parseDouble(jDetailSubmitTable.getModel().getValueAt(rowcount, com).toString().trim());
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null, "Invaid Number selected.");
jDetailSubmitTable.getModel().setValueAt("0", rowcount, com);
return;
}
// Adjusted amount is calculated below.
double nur = Double.parseDouble(jDetailSubmitTable.getModel().getValueAt(rowcount, 9).toString().trim());
double our = Double.parseDouble(jDetailSubmitTable.getModel().getValueAt(rowcount, 8).toString().trim());
double diff = nur - our;
double nunits = Double.parseDouble(jDetailSubmitTable.getModel().getValueAt(rowcount, 11).toString().trim());
double ans = diff * nunits;
jDetailSubmitTable.getModel().setValueAt(ans, rowcount, 12);
}
}
}
下面的行将获取选定的行索引,该索引是视图索引,因为您从JTable
实例询问了这一点:
int rowcount = jDetailSubmitTable.getSelectedRow();
稍后,您可以使用此视图索引为模型建立索引:
jDetailSubmitTable.getModel().getValueAt(rowcount, com)
您应该首先使用JTable.convertRowIndexToModel
将此视图索引转换为模型索引:
int selrowid = jDetailSubmitTable.getSelectedRow();
selrowid = jDetailSubmitTable.convertRowIndexToModel(selrowid);
[...]jDetailSubmitTable.getModel().getValueAt(selrowid, com)[...]
在SO上的这个答案中 ,我对视图与模型以及转换索引的需求进行了较长的解释。
更新: @camickr正确地观察到您应该使用TableModelEvent
附带的数据,即TableModelEvent.getFirstRow()
, TableModelEvent.getLastRow()
和TableModel.getColumn()
。 这些方法返回模型索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.