我们正在执行"维护者"在课堂上使用MySQL和Java NetBeans管理数据库。我们很好,但我们想知道如何创建某种事件以切换"更新按钮"通过文本框/单击将信息插入/修改到数据库时禁用。
执行项目时,我们可以通过编写/修改表格的选中/点击文本框,直接将数据修改为MySQL数据库;修改完成后,我们需要按 ENTER 以便编写修改,然后按 Modificar 按钮使更新生效。
我们想知道的是,如果在文本框处于活动状态时进行编辑,我们可以切换 Modificar 按钮。因为如果我们在修改完成后不先按 ENTER ,则在文本框处于活动状态时,单击更新按钮会导致错误,因为数据不是'有效的。
在这里,我们可以通过点击文本框(*红框)来编辑信息,同时这样做(当点击文本框和编辑信息时)我们想要"更新按钮"得到禁用/不可点击(绿色圆圈)。
到目前为止,这是我们的活动代码,但不是我们想要的: (其中" btnactualizar"其更新按钮和" tabla_cliente"是包含文本框的表格)
private void tabla_clienteKeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER){
btnactualizar.setEnabled(true);
}
}
这是更新按钮:
private void btnactualizarActionPerformed(java.awt.event.ActionEvent evt) {
String Rut = String.valueOf(tabla_cliente.getValueAt(tabla_cliente.getSelectedRow(), 0));
String Nombre = String.valueOf(tabla_cliente.getValueAt(tabla_cliente.getSelectedRow(), 1));
String Apellido = String.valueOf(tabla_cliente.getValueAt(tabla_cliente.getSelectedRow(), 2));
String Patente = String.valueOf(tabla_cliente.getValueAt(tabla_cliente.getSelectedRow(), 3));
int conf = JOptionPane.showConfirmDialog(null, "Estas seguro de actualizar? ", "mensaje", JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION);
if (conf == JOptionPane.OK_OPTION) {
exeCliente.actualizar_Cliente(Rut, Nombre, Apellido, Patente);
}
}
这是更新方法:
public void actualizar_Cliente(String run,String nombre, String apellido, String patente)
{
try{
conectar();
String SQL = "UPDATE CLIENTE SET Nombre='"+nombre+"', Apellido='"+apellido+"', Patente='"+patente+"' WHERE Rut='"+run+"';";
sentencia.executeUpdate(SQL);
JOptionPane.showMessageDialog(null,"Datos Actualizados");
conexion.close();
sentencia.close();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"Error:" +e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
}
}
提前感谢您提供给我们的任何答案。
答案 0 :(得分:3)
In general, because database access is inherently asynchronous, you should perform data manipulation in the background, typically using SwingWorker
的XPath表达式。显示了一个完整的示例here。在您的上下文中,在启动工作线程之前禁用该按钮。
button.setEnabled(false);
worker.execute();
启用工作人员done()
方法实施中的按钮,如图here所示。
@Override
protected void done() {
button.setEnabled(true);
}
附录:仔细查看您的特定用例,您可以按照建议prepareEditor()
在JTable
@Override
public Component prepareEditor(TableCellEditor editor, int row, int column) {
Component c = super.prepareEditor(editor, row, column);
button.setEnabled(false);
return c;
}
方法的实施中停用所需按钮}。
JTable
由于CellEditorListener
是JTable
,您可以按照here的editingStopped()
here 方法实施按钮。
@override
public void editingStopped(ChangeEvent ce) {
super.editingStopped(ce);
button.setEnabled(true);
}