Ich arbeite an dem TableModelListener für eine JTable. Jetzt kann die JTable den Wert gut erhalten. aber wenn es darum geht, den Wert der letzten Spalte der ausgewählten Zeile festzulegen. Es wird wackelig, nicht sicher, was der Fehler ist, es hängt nur auf. Keine Fehler auf Netbeans zu sehen, also nicht sicher, was ich denken soll. Aus diesem Grund bin ich mir nicht einmal sicher, ob die if-Anweisungen in Bezug auf die Einstellwerte überhaupt funktionieren. Sollte ich etwas anderes tun oder tun, damit dies geschieht? Update: Es scheint eine Endlosschleife zu sein. den Code zu einem Vorschlag bearbeitet, um nach Update-Tabellenereignissen zu suchen, aber immer noch das gleiche Problem zu haben. Hier ist der Code unter:Java Jtable-Fehler beim Festlegen eines Werts für eine Spalte, nachdem der Listener ausgeführt wurde
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);
}
}
}
Sie sollten die Methode getSelectedRow() nicht verwenden. Der Code wird in einem TableModelListener ausgeführt. Sie sollten die Werte aus dem TableModelEvent verwenden, wie in Ihrer ursprünglichen Antwort gezeigt wurde, die Ihr Looping-Problem gelöst hat. – camickr
@camickr Autsch, in der Tat. Ich warf einen Blick darauf ... –