1

妻のために小さな患者管理ソフトウェアを作成しています。プログラムは完全に機能していますが、患者データを更新したり登録を除外したりすると問題が発生します。すべての患者を検索するためのフォームがあり (日付、名前などを使用)、希望する患者を選択すると (最後の訪問から)、すべての患者のデータが別のフォームに表示されます。データを更新してこの訪問を除外することはできますが、保存すると、このフォーム (二次) は閉じられます (破棄されます)。しかし、メイン フォーム (検索フォーム) は以前の値を保持しています。セカンダリフォームを閉じた後にメインフォームを更新するにはどうすればよいですか??? ありがとう

編集済み:そのJavaを言うのを忘れました-sry ;)

Edited2: これは、セカンダリ フォームを呼び出すために使用するメソッドです。プロジェクトの作成には 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();
        } 
    }
4

1 に答える 1

1

私は次のようにします:

2 番目のフォームに「閉じる」ボタンが既にあると仮定します。

1)最初のフォームを2番目のフォームに送信します

 SecondForm second = new SecondForm(this);

または

SecondForm second = new SecondForm(firstForm);

Second Form の init 関数は firstForm インスタンスを保持し、閉じるときは次のようにします。

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

コードの小さなチャンクのみを投稿して申し訳ありませんが、アイデアは次のとおりです。

  • 2番目のフォームに最初のフォームのインスタンスを保存しました
  • ボタンまたは右上の「X」ボタンを使用して 2 番目のフォームを閉じる場合、最初のフォーム public を介して最初のフォームを更新します。

編集 私はスペイン語を話せません(それが別の言語である場合は申し訳ありません:))ので、いくつかの仮定を行います:tabelaデータを表示するコンポーネントです。私はJTableにはあまり興味がありませんが、まだupdate()機能があります。今それを行う方法。行を変更します

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

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

ここで、this最初のフォーム クラスを参照します。どのように呼ばれるか分からないので、後で呼びますFirstForm。わかった?

したがって、これCarregarAgendamentoは (別の仮定) 2 番目の形式です。このように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;
  }

まだお持ちでない場合

于 2012-03-18T13:22:45.687 に答える