我有一个使用jTable的数据库应用程序(使用netbeans),我已经为jTable添加了一个表模型监听器,所以当我编辑jTable时它还编辑了数据库(MySQL)。但是当用户点击jTable并点击一个按钮时它就会停止工作。
编辑:我意识到它只在我运行“jTable1.setModel(DbUtils.resultSetToTableModel(mySql.UpdateTable()))时停止工作;”更新表格。当我按下运行该行的按钮时,它会停止工作,任何其他按钮或任何其他时间它都可以工作。
更新表格:
<div [attr.role]="myAriaRole"></div>
<div [class.extra-sparkle]="isDelightful"></div>
<div [style.width.px]="mySize"></div>
}
tablemodellistener类:
public ResultSet UpdateTable(){
Connection con = connect();
try{
Statement s = con.createStatement();
ResultSet resultset;
resultset = s.executeQuery("select * from customera");
return resultset;
}
catch(SQLException e){
System.out.println(e.getMessage());
}
return null;
}
在构造函数中添加了表模型侦听器:
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
public class TableActionListener implements TableModelListener{
Rob1 r;
public TableActionListener(){
r = new Rob1();
}
public void tableChanged(TableModelEvent e){
System.out.println("action");
int id = r.getID();
int column = e.getColumn();
int row = e.getFirstRow();
}
}
要点击该行,我已添加此代码:
jTable1.getModel().addTableModelListener( new TableActionListener());
返回当前ID:
int id;
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
System.out.println(evt.getClickCount());
int row = jTable1.getSelectedRow();
int col = jTable1.getSelectedColumn();
id = (int)jTable1.getModel().getValueAt(row, 0);
}
答案 0 :(得分:1)
然而,当用户点击jTable并单击按钮时它会停止工作。
默认情况下,当您移动到表格中的另一个单元格时,表格单元格编辑器仅停止编辑。
因此,当您单击另一个组件时,您需要告诉该表停止编辑。然后保存数据并调用TableModelListener。
查看Table Stop Editing有两种方法:
1)向表中添加一个属性:
JTable table = new JTable(...);
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
2)将代码添加到按钮的监听器:
if (table.isEditing())
table.getCellEditor().stopCellEditing();
您可能还想查看可能更适合使用的Table Cell Listener,而不是使用TableModelListener。