Метод removeRow() в пользовательском Swing TableModel
У меня есть JTable, который заполняется с помощью пользовательской TableModel, которую я создал. У меня есть другой JTable, к которому строки могут быть добавлены из первого JTable. Я могу добавить строку в новый JTable без проблем, но мне нужно удалить эту строку из первого JTable после добавления его в новый JTable. К сожалению, removeRow() является только методом для DefaultTableModel, и я проверил исходный код, и он не отображается...
Заранее спасибо!
вот моя пользовательская модель стола:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ttp;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.*;
import java.util.*;
/**
*
* @author ericrea
*/
/**creates the model for the accounts table*/
public class tableModel extends AbstractTableModel {
//private int rowCount = 0;
private static final int COLUMN_COUNT = 3;
private Conceptual_Package pp;
Conceptual_Package j = GUIpos.i;
public tableModel(Conceptual_Package pp) {
this.pp = pp;
}
/**sets the column headers*/
public String getColumnName(int i){
switch (i) {
case 0:
return "Sec";
case 1:
return "Row";
case 2:
return "Seat";
default:
return null;
}
}
/**figures out how many rows the model needs*/
public int getRowCount() {
int h = 0;
try {
h = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).size();
} catch (DataException ex) {
Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
}
return h;
}
/**Figures out number of columns*/
public int getColumnCount() {
return COLUMN_COUNT;
}
/**gets the account information from the Physical_Package*/
public Object getValueAt(int rowIndex, int columnIndex) {
String a = null;
String b = null;
String c = null;
try {
Physical_Package pp = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(rowIndex);
a = pp.getVenueSeat().getRowInVenue().getSectionInVenue().getSectionNumber();
b = pp.getVenueSeat().getRowInVenue().getRowNumber();
c = pp.getVenueSeat().getSeatNumber();
} catch (DataException ex) {
Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
}
switch (columnIndex) {
case 0:
return a.trim();
case 1:
return b.trim();
case 2:
return c.trim();
default:
return null;
}
}
/**gets the right account for the Physical_Package*/
public Physical_Package getCPackage(int index){
Physical_Package d = null;
try {
Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(index);
} catch (DataException ex) {
Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
}
return d;
}
public void removeRow(int index){
}
//write in mainFrame, in panel
//ValueChanged{
// get the selected name
// Physical_Packages.get()
// namefield.settext(pp.getname);
//
//}
}
1 ответ
К сожалению, removeRow() является только методом для DefaultTableModel
Посмотрите на исходный код DefaultTableModel. Оба эти метода реализованы, поэтому вы можете использовать код и пример того, как может выглядеть ваш код. Ключ - это методы "fireXXX". Вызов этих методов уведомит таблицу о том, что модель изменилась, поэтому таблица может перекрашиваться сама.
От вашего старого вопроса (который вы только что удалили) вы утверждаете: "Я могу добавить строку в новый jTable без проблем".
После просмотра вашего кода (до того, как вы удалили вопрос) у меня есть следующий комментарий:
Похоже, вы создаете совершенно новую TableModel. Это не то же самое, что добавить строку в существующую модель. Это не похоже на очень хорошее решение. Вместо этого вам нужно создать addRow (...)
Если вы находите код слишком запутанным в DefaultTableModel, то вот код, который показывает, как я реализовал методы addRow (...) и removeRow (...). См. Модель таблицы строк. Класс показывает правильные методы fireXXX для использования для каждого метода.