Прежде всего, если ваши столбцы содержат числа, вам следует хранить значение Double
в модели, а не строку.
Поэтому вам необходимо переопределить метод getColumnClass(...)
вашего TableModel
, чтобы сообщить таблице тип данных, хранящихся в столбце, чтобы таблица могла использовать соответствующий рендерер / редактор.
Например:
@Override
public Class getColumnClass(int column)
{
switch (column)
{
case 0: return Double.class;
case 3: return Double.class;
case 6: return Double.class;
default: return Object.class;
}
}
Вы также можете переопределить метод isCellEditable(...)
, чтобы предотвратить редактирование данных в столбце 6, поскольку его значение всегда будет результатом значений, найденных в столбцах 0 и 3.
когда кто-то вводит значение
Всякий раз, когда данные изменяются в таблице, TableModel обновляется.
Таким образом, один из подходов заключается в переопределении setValueAt(...)
метод вашей TableModel для пересчета значения для столбца 6.
Основная логика будет такой:
@Override
public void setValueAt(Object value, int row, int column)
{
super.setValueAt(value, row, column);
if (column == 0 || or column == 3)
{
double column0 = getValueAt(row, 0);
double column3 = getValueAt(row, 3);
double result = column0 * column3;
setValueAt(result, row, 6);
}
}
Прочитайте раздел из учебника по Swing на Как использовать таблицы для получения дополнительной информации.