Java UPDATE语句后JTable未刷新
大家好,这里是我们的社区。执行UPDATE语句后刷新JTable时出现问题。我在自己的TableModel类中创建了一个tableUpdate方法,但它似乎不起作用。我在下面的类中的ActionListener中调用它。如果有人能告诉我我做错了什么,我将不胜感激Java UPDATE语句后JTable未刷新,java,swing,user-interface,jtable,tablemodel,Java,Swing,User Interface,Jtable,Tablemodel,大家好,这里是我们的社区。执行UPDATE语句后刷新JTable时出现问题。我在自己的TableModel类中创建了一个tableUpdate方法,但它似乎不起作用。我在下面的类中的ActionListener中调用它。如果有人能告诉我我做错了什么,我将不胜感激 class MyTableModel extends AbstractTableModel { /** * */ private sta
class MyTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Member> members = new ArrayList<Member>();
public MyTableModel(List<Member> members) {
this.members = members;
}
public void addMember(Member m) {
members.add(m);
int row = members.size() - 1;
fireTableRowsInserted(row, row);
}
public void removeMemberFromTable(int row) {
members.remove(row);
fireTableRowsDeleted(row, row);
}
public void tableUpdate(int row, Member m) {
members.set(row, m);
fireTableDataChanged();
}
public List<Member> getMembers() {
return new ArrayList<Member>(members);
}
@Override
public int getColumnCount() {
return 8;
}
@Override
public int getRowCount() {
return members.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Member m = members.get(rowIndex);
switch (columnIndex) {
case 0:
return m.getMemberId();
case 1:
return m.getfName();
case 2:
return m.getlName();
case 3:
return m.getAddress();
case 4:
return m.getZipCode();
case 5:
return m.getCity();
case 6:
return m.getEmail();
case 7:
return m.getPhoneNo();
default:
return "";
}
}
public String getColumnName(int column) {
switch (column) {
case 0:
return "MedlemsID";
case 1:
return "Fornavn";
case 2:
return "Efternavn";
case 3:
return "Adresse";
case 4:
return "Postnummer";
case 5:
return "By";
case 6:
return "Email";
case 7:
return "Telefonnr";
default:
return "";
}
}
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 1:
return Integer.class;
case 2:
return String.class;
case 3:
return String.class;
default:
return String.class;
}
}
}
类MyTableModel扩展了AbstractTableModel{
/**
*
*/
私有静态最终长serialVersionUID=1L;
私有列表成员=新的ArrayList();
公共MyTableModel(列表成员){
这个.成员=成员;
}
公共无效添加成员(成员m){
成员.添加(m);
int row=members.size()-1;
已插入的防火表行(行,行);
}
public void removemberfromtable(int行){
成员。删除(世界其他地区);
fireTableRowsDeleted(行,行);
}
公共void tableUpdate(int行,成员m){
成员集(行,m);
fireTableDataChanged();
}
公共列表getMembers(){
返回新的ArrayList(成员);
}
@凌驾
public int getColumnCount(){
返回8;
}
@凌驾
public int getRowCount(){
返回成员。size();
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
成员m=成员.get(rowIndex);
开关(列索引){
案例0:
返回m.getMemberId();
案例1:
返回m.getfName();
案例2:
返回m.getlName();
案例3:
返回m.getAddress();
案例4:
返回m.getZipCode();
案例5:
返回m.getCity();
案例6:
返回m.getEmail();
案例7:
返回m.getPhoneNo();
违约:
返回“”;
}
}
公共字符串getColumnName(int列){
开关(列){
案例0:
返回“MedlemsID”;
案例1:
返回“Fornavn”;
案例2:
返回“Efternavn”;
案例3:
返回“地址”;
案例4:
返回“Postnummer”;
案例5:
返回“通过”;
案例6:
返回“电子邮件”;
案例7:
返回“telefonr”;
违约:
返回“”;
}
}
公共类getColumnClass(int columnIndex){
开关(列索引){
案例1:
返回Integer.class;
案例2:
返回字符串.class;
案例3:
返回字符串.class;
违约:
返回字符串.class;
}
}
}
editBtn.addActionListener(新ActionListener(){ @凌驾 已执行的公共无效操作(操作事件e){ int zipCode=Integer.parseInt(zipCodeTF.getText()); Member m=新成员(fNameTF.getText(),lNameTF.getText(), addressTF.getText(),zipCode,cityTF.getText(), emailTF.getText(),phoneNoTF.getText()); MemberMapper mMapper=新的MemberMapper(); inti=gui.getIndex(); 议员(m,i); editMemberFrame.setVisible(false); List data=mMapper.selectAllMembers(); MyTableModel MyTableModel=新的MyTableModel(数据); int row=gui.getTable().getSelectedRow(); myTableModel.tableUpdate(行,m); } });
看看这个片段
MyTableModel myTableModel = new MyTableModel(data);
int row = gui.getTable().getSelectedRow();
myTableModel.tableUpdate(row, m);
您正在创建一个新的表模型,但它与表没有任何关联
我也会使用
fireTableRowsUpdates
而不是fireTableDateChanged
,因为这不是一个戏剧性的更新我可能会使用fireTableCellUpdated或fireTableRowsUpdates而不是fireTableDataChanged,但这一切都假设myTableModel是表使用的同一个模型…尝试了这两种方法。没什么区别。但我正在制作另一个类的TableModel实例?或者这就是我正在尝试的。那么表是如何知道的呢?我是从另一个类中获取表的,正如您看到的“gui.getTable()”应该是“gui.getTable().setModel(myTableModel)”?但是在代码中,您创建的是一个全新的模型实例,它从未应用于表
MyTableModel myTableModel = new MyTableModel(data);
int row = gui.getTable().getSelectedRow();
myTableModel.tableUpdate(row, m);