2012-03-18 89 views
1

我正在爲我的妻子創建一個小小的患者管理軟件。該程序功能齊全,但一旦我更新患者數據或排除任何註冊表,我就會遇到問題。 我有一個搜索表單,可以讓所有患者(使用日期,名稱...)然後選擇所需患者(來自上次訪問),並將所有患者的數據顯示爲另一種形式。我可以更新數據,排除這次訪問,但是,一旦我保存它,這個表單(secundary)就會關閉(dispose)。但主要形式(搜索表單)擁有以前的值。 如何在關閉secundary形式後刷新主窗體? THX很多關閉secundary表格後更新主表

編輯:忘了說了它的Java - SRY)

Edited2: 這是使用調用secundary形式的法林。我使用Netbeans創建該項目。

private void btn_selecionaActionPerformed(java.awt.event.ActionEvent evt) {            
     try{ 
     int sel = tabela.getSelectedRow(); 

     if (sel != -1){ 
      String sql = "select * from agendados " 
        + "where numag = " + modelo.getValueAt(sel, 5); 
      con_mnt.executaSQL(sql); 
      func = new Funcoes(); 
      func.carregaDados(dados, con_mnt.rs); 
      new CarregarAgendamento(func.getDados()).setVisible(true); 

     } else{ 
      JOptionPane.showMessageDialog(null, "Selecione algum paciente antes.", " Atenção!!!", JOptionPane.ERROR_MESSAGE); 
     } 

     } 
     catch(SQLException | NumberFormatException e){ 
      JOptionPane.showMessageDialog(null, "Nao existe dados ainda", " Atenção!!!", JOptionPane.ERROR_MESSAGE); 
     } 
    } 

編輯3: 保存,刪除和salvarAgendamento方法:

private void btn_salvaActionPerformed(java.awt.event.ActionEvent evt) {           
    salvarAgendamento(); 
    dispose(); 
}           

private void btn_deleteActionPerformed(java.awt.event.ActionEvent evt) {           
    if(javax.swing.JOptionPane.showConfirmDialog(null,"Deseja realmente Excluir este Agendamento?","ATENÇÃO ",javax.swing.JOptionPane.YES_NO_OPTION)==0) 
    { 
     con_ag = new Firebird(func.fullPath("/db/manutencao.fdb")); 
     con_ag.removeFDB("agendados", "numag", jt_cod.getText()); 
     Agendados.refresh = 1; 
     this.dispose(); 
    } 

} 

public void salvarAgendamento(){ 
     ArrayList<Object> colunas = new ArrayList<>(); 
     ArrayList<Object> valores = new ArrayList<>(); 
     calendario = new Calendario(); 

     if (jcb_motivo.getSelectedIndex() == -1) 
     { 
      JOptionPane.showMessageDialog(null, "Faltou o Motivo do Agendamento!"); 
      jcb_motivo.requestFocus(); 
     } 
     else if (jt_dataAg.getText().equals("")) 
     { 
      JOptionPane.showMessageDialog(null, "Faltou a Data do Agendamento!"); 
      jt_dataAg.requestFocus(); 
     } 
     else if (dados.getStatusAg() == 0) 
     { 
      JOptionPane.showMessageDialog(null, "Faltou selecionar o Status do Agendamento!"); 
      jcb_status.requestFocus(); 
     } 
     else 
     { 
      calendario.dataFormatada("dd/mm/yyyy", "yyyy-mm-dd", jt_dataAg.getText()); 
      dados.setDataAg(calendario.getDataFormatada() + " 00:00:00"); 

      colunas.add("statusag"); 
      colunas.add("obs"); 

      valores.add(jt_tel1.getText()); 
      valores.add(jt_tel2.getText()); 
      valores.add(jt_cel.getText()); 
      valores.add(dados.getConvenioNum()); //convnum 
      valores.add(dados.getDentistaNum()); //dentnum 
      valores.add(jcb_motivo.getSelectedItem()); 
      valores.add(dados.getDataAg()); //dataag 
      valores.add(dados.getStatusAg()); //statusag 
      valores.add(area_obs.getText()); 
      valores.add(jt_cod.getText()); 

      grava(valores); 
      JOptionPane.showMessageDialog(null, "Agendamento alterado com sucesso!"); 
      dispose(); 
     } 
    } 
+0

的編程語言是那些形式的書面嗎? – 2012-03-18 13:03:39

+0

其Java,,, sry ^^ – Galla 2012-03-18 13:11:42

回答

1

我會做這樣的:

假設,你已經 「關閉」 按鈕第二個形式。

1)我想第一種形式發送到的第二種形式的第二

SecondForm second = new SecondForm(this); 

或者

SecondForm second = new SecondForm(firstForm); 

初始化函數將保持firstForm實例和關閉的時候,我會去像即:

public void actionPerformed(ActionEvent e){ 
firstForm.update(); 
this.close(); 
} 

對不起,只發布了一小塊代碼,但想法是:

  • 必須通過按鈕或通過「X」按鈕,右上方存儲第一種形式的實例在第二種形式
  • 當關閉第二種形式,通過第一的形式公開

編輯更新第一種形式 我不會說西班牙語(對不起,如果多數民衆贊成在另一種語言:)),所以我會做一些假設:tabela是組件,它顯示數據。我不是那樣進入JTable,但仍然有update()函數。現在該怎麼做。我行

new CarregarAgendamento(func.getDados()).setVisible(true); 

改變

new CarregarAgendamento(func.getDados(), this).setVisible(true); 

現在,this reffers到第一窗體類。因爲我不知道它是如何調用的,我會進一步稱它爲FirstForm。好?

因此,CarregarAgendamento是(另一種假設)的第二種形式。我會更新的init這樣

public class CarregarAgendamento 
//all previous private field 
private FirstForm first; 

/* Here I assume that the func.getDados() returns Funcoes. If not, change it */ 
public CarregarAgendamento(Funcoes func, FirstForm f){ 
//leave everything as it was, just add the line below 
this.first = f; 
} 

現在的功能:

private void btn_salvaActionPerformed(java.awt.event.ActionEvent evt) {           
    salvarAgendamento(); 
    first.getTabela().update(); //method to update the table. 
    dispose(); 
}           

private void btn_deleteActionPerformed(java.awt.event.ActionEvent evt) {            
    if(javax.swing.JOptionPane.showConfirmDialog(null,"Deseja realmente Excluir este Agendamento?","ATENÇÃO ",javax.swing.JOptionPane.YES_NO_OPTION)==0) 
    { 
     con_ag = new Firebird(func.fullPath("/db/manutencao.fdb")); 
     con_ag.removeFDB("agendados", "numag", jt_cod.getText()); 
     Agendados.refresh = 1; 
     first.getTabela().update(); //method to update the table. 
     this.dispose(); 
    } 

} 

public void salvarAgendamento(){ 
     ArrayList<Object> colunas = new ArrayList<>(); 
     ArrayList<Object> valores = new ArrayList<>(); 
     calendario = new Calendario(); 

     if (jcb_motivo.getSelectedIndex() == -1) 
     { 
      JOptionPane.showMessageDialog(null, "Faltou o Motivo do Agendamento!"); 
      jcb_motivo.requestFocus(); 
     } 
     else if (jt_dataAg.getText().equals("")) 
     { 
      JOptionPane.showMessageDialog(null, "Faltou a Data do Agendamento!"); 
      jt_dataAg.requestFocus(); 
     } 
     else if (dados.getStatusAg() == 0) 
     { 
      JOptionPane.showMessageDialog(null, "Faltou selecionar o Status do Agendamento!"); 
      jcb_status.requestFocus(); 
     } 
     else 
     { 
      calendario.dataFormatada("dd/mm/yyyy", "yyyy-mm-dd", jt_dataAg.getText()); 
      dados.setDataAg(calendario.getDataFormatada() + " 00:00:00"); 

      colunas.add("statusag"); 
      colunas.add("obs"); 

      valores.add(jt_tel1.getText()); 
      valores.add(jt_tel2.getText()); 
      valores.add(jt_cel.getText()); 
      valores.add(dados.getConvenioNum()); //convnum 
      valores.add(dados.getDentistaNum()); //dentnum 
      valores.add(jcb_motivo.getSelectedItem()); 
      valores.add(dados.getDataAg()); //dataag 
      valores.add(dados.getStatusAg()); //statusag 
      valores.add(area_obs.getText()); 
      valores.add(jt_cod.getText()); 

      grava(valores); 
      first.getTabela().update(); //method to update the table. 
      JOptionPane.showMessageDialog(null, "Agendamento alterado com sucesso!"); 
      dispose(); 
     } 
    } 

如前所述之前 - 我從來沒有與JTable的工作,所以我完全不知道如何更新它。只是希望,它會起作用。顯然,你有這個功能的地方添加到您的FirstForm:

public JTable getTabela(){ 
    return tabela; 
    } 

如果你沒有它已經

+0

我添加了加載第二個表單的方法。你可以檢查它嗎? thx – Galla 2012-03-18 14:15:51

+0

以及你如何關閉它? – 2012-03-18 15:40:36

+0

我只需要刷新主表單,當我點擊保存按鈕或刪除按鈕。然後它將應用更改或刪除註冊並關閉此表單。我添加保存和刪除操作方法。 – Galla 2012-03-18 17:15:36