Не могу удалить или обновить данные данные из таблицы jTable
У меня есть JTable, где я использовал свою Модель данных основанную на интерфейсе TableModel вместе с TableRowSorter: и есть функции добавления, обновления и удаление данных из этой таблицы по выбору строки из таблицы Работает только добавление и я не могу понять почему не работает удаление и обновление данных Выбор конкретной строки я реализовал так:
public class MDIApplication extends javax.swing.JFrame implements ActionListener{
TableRowSorter<DefaultTableModel> trs = new TableRowSorter(jTable1.getModel());
jTable1.setRowSorter(trs);
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
sortKeys.add(new RowSorter.SortKey(3, SortOrder.ASCENDING));
sortKeys.add(new RowSorter.SortKey(1, SortOrder.DESCENDING));
trs.setSortKeys(sortKeys);
trs.sort();
jTable1.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseClicked(java.awt.event.MouseEvent evt) { int setSelectedRow = jTable1.rowAtPoint(evt.getPoint());
idTeacherTextField.setText(Global.tableModel.getValueAt(trs.convertRowIndexToModel(setSelectedRow), 0).toString());
codeUTextField.setText(Global.tableModel.getValueAt(trs.convertRowIndexToModel(setSelectedRow), 1).toString());
numQTextField.setText(Global.tableModel.getValueAt(trs.convertRowIndexToModel(setSelectedRow), 2).toString());
amountDTextField.setText(Global.tableModel.getValueAt(trs.convertRowIndexToModel(setSelectedRow), 3).toString());
}
});
}
А функции добавления удаления и обновления выглядят так + некоторый код для понимания общей картины
public class Result {
private String teacherId; // Айди Преподователя
private String codeUniversity; // Шифр Вуза
private int numQuarter; // Номер Квартала
private int amountDays; // Количество Дней
public Result() {
teacherId = "";
codeUniversity = "";
numQuarter = 0;
amountDays = 0;
}
public Result(String teacherId, String codeUniversity, int numQuarter, int amountDays){
this.teacherId = teacherId;
this.codeUniversity = codeUniversity;
this.numQuarter = numQuarter;
this.amountDays = amountDays;
}
public String getTeacherId() { return teacherId; }
public String getCodeUniversity() { return codeUniversity; }
public int getNumQuarter() { return numQuarter; }
public int getAmountDays() { return amountDays; }
public void setTeacherId(String teacherId) { this.teacherId = teacherId; }
public void setCodeUniversity(String codeUniversity) { this.codeUniversity = codeUniversity; }
public void setNumQuarter(int numQuarter) { this.numQuarter = numQuarter; }
public void setAmountDays(int amountDays) { this.amountDays = amountDays; }
}
public class ResultTableModel extends AbstractTableModel {
private static final int COLUMN_ID = 0;
private static final int COLUMN_CODE = 1;
private static final int COLUMN_NUM = 2;
private static final int COLUMN_AMOUNT = 3;
private String[] columnNames = {"Номер Преподавателя", "Шифр Вуза", "Номер Квартала", "Количество Дней"};
List<Result> results;
public ResultTableModel(List<Result> results) {
this.results = results;
}
@Override
public int getRowCount() {
return results.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
public Class<?> getColumnClass( int columnIndex) {
if (results.isEmpty()) {
return Object.class;
}
return getValueAt(0, columnIndex).getClass();
}
public Object getValueAt(int rowIndex, int columnIndex) {
Result res = results.get(rowIndex);
Object returnValue = null;
switch (columnIndex) {
case COLUMN_ID:
returnValue = res.getTeacherId();
break;
case COLUMN_CODE:
returnValue = res.getCodeUniversity();
break;
case COLUMN_NUM:
returnValue = res.getNumQuarter();
break;
case COLUMN_AMOUNT:
returnValue = res.getAmountDays();
break;
default:
throw new IllegalArgumentException("Invalid column index");
}
return returnValue;
}
}
public class MDIApplication extends javax.swing.JFrame implements ActionListener{
Global.table = new ResultGroup();
Global.results = new ArrayList<>();
Global.tableModel = new ResultTableModel(Global.results);
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) { //добавление новых данных из текстовых полей
int n,n2;
String str1, str2, str3 ,str4;
str1=idTeacherTextField.getText(); str2=codeUTextField.getText(); str3=numQTextField.getText(); str4=amountDTextField.getText();
if (str1.equals("")||str2.equals("")||str3.equals("")||str4.equals("")){
sMessages.setText("Задайте значения полей");
return;}
try{//Контролируем исключения при преобразовании из String в число
n=Integer.parseInt(str3);
}//try
catch (NumberFormatException e){// обработчик исключения для try
sMessages.setText(" Задайте правильно число голов");
return;}
try{//Контролируем исключения при преобразовании из String в число
n2=Integer.parseInt(str4);
}//try
catch (NumberFormatException e){// обработчик исключения для try
sMessages.setText(" Задайте правильно число голов");
return;}
sMessages.setText(
" Запрос на добавление записи в таблицу");
if (!Global.table.addResult(new Result(str1,str2,n,n2)))
sMessages.setText(
" Запись не добавлена, возможно нарушена уникальность ключа");
Global.updateJTable(Global.table.getResults());
idTeacherTextField.setText(""); codeUTextField.setText(""); numQTextField.setText(""); amountDTextField.setText("");
}
delButton.addActionListener(new java.awt.event.ActionListener() { // Удаление
public void actionPerformed(java.awt.event.ActionEvent evt) {
int n,n2;
String str1, str2, str3 ,str4;
str1=idTeacherTextField.getText(); str2=codeUTextField.getText(); str3=numQTextField.getText(); str4=amountDTextField.getText();
if (str1.equals("")||str2.equals("")||str3.equals("")||str4.equals("")){
sMessages.setText("Задайте значения полей");
return;}
n=Integer.parseInt(str3);
n2=Integer.parseInt(str4);
sMessages.setText(
" Запрос на удаление записи по ключу");
Global.table.delResult(new Result(str1,str2,n,n2));
Global.updateJTable(Global.table.getResults());
idTeacherTextField.setText(""); codeUTextField.setText(""); numQTextField.setText(""); amountDTextField.setText("");
}
});
private void updateButtonActionPerformed(java.awt.event.ActionEvent evt) { //обновление
int n,n2;
String str1, str2, str3 ,str4;
str1=idTeacherTextField.getText(); str2=codeUTextField.getText(); str3=numQTextField.getText(); str4=amountDTextField.getText();
if (str1.equals("")||str2.equals("")||str3.equals("")||str4.equals("")){
sMessages.setText("Задайте значения полей");
return;}
try{//Контролируем исключения при преобразовании из String в число
n=Integer.parseInt(str3);
}//try
catch (NumberFormatException e){// обработчик исключения для try
sMessages.setText(" Задайте правильно число голов");
return;}
try{//Контролируем исключения при преобразовании из String в число
n2=Integer.parseInt(str4);
}//try
catch (NumberFormatException e){// обработчик исключения для try
sMessages.setText(" Задайте правильно число голов");
return;}
sMessages.setText(
" Запрос на обновление записи в таблице");
if (!Global.table.updateResult(new Result(str1,str2,n,n2)))
sMessages.setText(
" Запись не обновлена, возможно записи с таким ключом нет");
Global.updateJTable(Global.table.getResults());
idTeacherTextField.setText(""); codeUTextField.setText(""); numQTextField.setText(""); amountDTextField.setText("");
}
}
}
public class ResultGroup {
public boolean addResult(Result res){
if (getResult(res)!=null)
return false;
if (results.add(res)) return true;
else return false;
}
public boolean delResult(Result res){
if (getResult(res)!=null)
return false;
if (results.remove(res)) return true;
else return false;
}
public boolean updateResult(Result res){
Result r = getResult(res);
if (r!=null) {
r.setTeacherId(res.getTeacherId());
r.setCodeUniversity(res.getCodeUniversity());
r.setNumQuarter(res.getNumQuarter());
r.setAmountDays(res.getAmountDays());
return true;
}
return false;
}
}
public class Global { // Глобальный класс
public static ResultGroup table;
public static List <Result> results;
static ResultTableModel tableModel;
public static void updateJTable(List <Result> res){
results.clear();
results.addAll(res);
tableModel.fireTableDataChanged();
}
}
Я новичок в программировании помогите пожалуйста)