Обновление основной формы после закрытия вторичной формы - PullRequest
1 голос
/ 18 марта 2012

Я создаю маленькую программу управления пациентами для моей жены.Программа полностью функциональна, но у меня возникла проблема, когда я обновляю данные пациента или исключаю какой-либо регистр.У меня есть форма поиска, чтобы привести всех пациентов (используя дату, имя ...), затем я выбираю нужного пациента (с момента последнего посещения), и все данные пациента отображаются в другой форме.Я могу обновить данные, исключить это посещение, но после сохранения эта форма (вторичная) закрывается (удаляется).Но основная форма (форма поиска) содержит предыдущие значения.Как я могу сделать, чтобы обновить основную форму после закрытия вторичной формы ???thx a lot

Отредактировано: Забыл сказать, что его Java - sry;)

Отредактировано2: это метод, который я использую для вызова вспомогательной формы.Я использовал 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: методы Save, Delete и 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 Ответ

1 голос
/ 18 марта 2012

Я бы сделал это так:

Предположим, у вас уже есть кнопка "Закрыть" на второй форме.

1) Я бы отправил первую форму второй

 SecondForm second = new SecondForm(this);

Или

SecondForm second = new SecondForm(firstForm);

Функция инициализации формы Second сохранит экземпляр firstForm, и при закрытии я получу что-то вроде этого:

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

Извините за публикацию тольконебольшие куски кода, но идея такова:

  • Сохраните экземпляр первой формы во второй форме
  • При закрытии второй формы, с помощью кнопки или с помощью кнопки «X» в правом верхнем углуобновить первую форму через первую форму public

EDIT Я не говорю по-испански (извините, если это другой язык :)), поэтому я сделаю несколько предположений: tabela этокомпонент, который показывает данные.Я не вхожу в JTable, но есть функция update().Теперь, как это сделать.Я бы изменил строку

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

на

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

Теперь this относится к первому классу формы.Поскольку я не знаю, как он называется, я буду называть его 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;
  }

Если у вас ее уже нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...