关闭secundary表单后更新主表单

时间:2012-03-18 13:01:59

标签: java forms updating

我正在为我的妻子创建一个小病人管理软件。该程序功能齐全,但一旦我更新患者数据或排除任何注册,我就会遇到问题。 我有一个搜索表格带来所有患者(使用日期,姓名......)然后我选择所需的患者(从上次访问),所有患者的数据显示为另一种形式。我可以更新数据,排除此访问,但是,一旦我保存它,此表单(secundary)将被关闭(处置)。但主要形式(搜索表单)是保留以前的值。 关闭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();
        } 
    }

1 个答案:

答案 0 :(得分:1)

我会这样做:

假设您已在第二张表格上有“关闭”按钮。

1)我会将第一张表格发送到第二张

 SecondForm second = new SecondForm(this);

或者

SecondForm second = new SecondForm(firstForm);

第二种形式的init函数会保留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引用了第一个表单类。因为我不知道它的调用方式,我将进一步称之为FirstForm。 OK?

因此,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;
  }

如果你还没有它