Dar um 'refresh' em um JInternalFrame

Pessoal, estou tentando e nao conseguindo:

1-Na minha tela principal, no menu, tenho um JMenu que chama uma jIntenalFrame, chamada TelaAlteraSerialEQ.java

2-Quando executo com sucesso a instrução, quero fazer um refresh nessa JInternalFrame chamando-a novamente. Estou usando uma logica de dar um this.dispose e chama-la novamente.

3-Mas nao funciona: O this dispose funciona e fecha a tela MAS, não a abre novamente. Segue as instruções que estou usando:

if (adicionado > 0) // – condição satisfeita para prosseguir

{ JOptionPane.showMessageDialog(null, “Numero de serie alterado com sucesso”);

// — a partir daqui, que estou tentando dar o ‘refresh’

   TelaAlteraSerialEQ d = new TelaAlteraSerialEQ();

  d.setVisible(true);
  d.repaint();
  d.validate();
  this.dispose();   // --- só isso funciona e fecha a tela.

4-Só aceita o this.dispose. Não reabre a mesma JInternalFrame novamente…

5-Como faço esse ‘refresh’ funcionar chamando a mesma JInternalFrame novamente?

6-Agradeço. obgd

Olá, o que você quer dizer com “Refresh”? atualizar um campo uma tabela?
A maneira mais fácil de fazer isso é guardar a instância da sua internal frame em uma variável e após realizar sua “instrução” (que não sei o que é), chame um método public da sua internal frame que irá fazer esse “Refresh” pra você.

Poste o código, ajude-nos a te ajudar.

Você faz um new TelaAlteraSerialEQ() e em seguida quer fechar e abrir essa tela?
Não faz o menor sentido.

Precisa realmente sempre criar uma nova instância de TelaAlteraSerialEQ?
O que exatamente você quer fazer?

Amigo, a tela se atualiza sem precisar de uma nova instância.
até porque se for uma nova instância, não é aquela atualizada, o nome já diz tudo.
essa alteração é feita aonde?

Opa, na verdade, seria um ‘quebra-galho’ para tentar ‘resolver’ um outro problema que ainda não comecei a ver.
Eu pesquiso um item (no caso um serial-number) através de uma jcombobox e faço a atualização dos dados do registro, e tambem do proprio serial_number se precisar.
Porem, é feita a atualização no banco. MAS, a tela de alteração permanece com os dados da jcombobox antes da atualização desse serial_number.
Por isso, pensei em fechar e recarregar a tela sempre que atualizo algum dado.
Não consegui ainda, recarregar a instrução que carrega a jcombobox.

e não pode fazer um método para esse “refresh” ?

e nele possuindo vários sets, para fields, combobox, até um setText(""); caso queira limpar alguns campos, poderia alterar o que estivesse “desatualizado”

Opa, aqui vai o codigo. Tirei algumas instruções pra nao poluir muito.

ackage br.com.equipamento.telas;
import java.sql.*;
import br.com.equipamento.dal.ModuloConexaoEQ;
import …
/
public class TelaAlteraSerialEQ extends javax.swing.JInternalFrame {
Connection conexao = null;
PreparedStatement pst = null;
ResultSet rs = null;

    public TelaAlteraSerialEQ()  {    
       initComponents();
       conexao=ModuloConexaoEQ.conector();
       this.populaJcmbSerial();
     }

// ----- inicio do metodo alterar ---------
private void alterar() {
// ----- checar se existe duplicidade de serial
String sql1 = “select * from dados where num_serie=?”;
try {
pst = conexao.prepareStatement(sql1);
pst.setString(1, (String) txtSerie.getText().trim());
rs=pst.executeQuery();
if (rs.next()) {
JOptionPane.showMessageDialog(null, “ESSE SERIAL JA EXISTE”);
}
else {
// ---- fim do check de duplicidade de serial

String sql = “update dados set codigo_dados=?,num_serie=? where codigo_dados=?”;

    try {
        pst = conexao.prepareStatement(sql);
        pst.setString(1, txtCodigo.getText());
        pst.setString(2, txtSerie.getText().trim());
        pst.setString(3, txtCodigo.getText());

// validação dos campos obrigatórios

if (
(txtSerie.getText().isEmpty())
) {
JOptionPane.showMessageDialog(null, “Preencha todos os campos obrigatorios”);
} else {
// a linha abaixo atualiza a tabela tbusuarios com os dados do formulario
// a estrutura abaixo, é para confirmar a inserção dos dados na tabela
int adicionado = pst.executeUpdate();

            if (adicionado > 0) {

JOptionPane.showMessageDialog(null, “Numero de serie alterado com sucesso”);

///* ------------ AQUI COMEÇA MEU PROBLEMA…
// ------------------------------------------------------------------
Se a alteração do serial for feita,
Quero que a TelaAlteraSerialEQ seja recarregada para resetar o jcombobox e
mostrar o novo valor do serial que foi alterado…
Mas, Só funciona o dispose…

   TelaAlteraSerialEQ s = new TelaAlteraSerialEQ();
   s.dispose();

s.setVisible(true);
S.repaint();
S.validate();

// comandos baixo paa limpar os campos após a inclusão na tabela

                txtSerie.setText(null);
                txtCodigo.setText(null);
            }
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e );
    }
      } 
   }  //  ---- do primeiro try
       catch (Exception e) {  }      
}  //  fim do metodo alterar    

// -------- metodo pega serial do comboBox
public void populaJcmbSerial ()
{
String sql = “select num_serie from dados order by num_serie”;
try {
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next())
{
cmbSerial.addItem(rs.getString(“num_serie”));
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}

} 

// ------- inicio novo metodo consulta serial –
private void consulta_serial() {
String sql=“select * from dados where num_serie = ?”;
try {
pst = conexao.prepareStatement(sql);
pst.setString(1, (String) cmbSerial.getSelectedItem());
rs=pst.executeQuery();

if (rs.next()) {
String perfil=“setor valido”;
System.out.println("O setor é: "+perfil);
}else{
JOptionPane.showMessageDialog(null, “Serial não existe”);
}
// a linha abaixo, usa a biblioteca rs2xml.jar para preencher a tabela
rs=pst.executeQuery();

    TblClientes.setModel(DbUtils.resultSetToTableModel(rs));
    etc.....

}
// ------- fim do novo metodo consulta serial –
// inicio do metodo preencher os dados do formulario
public void setar_campos(){
int setar = TblClientes.getSelectedRow();
txtCodigo.setText(TblClientes.getModel().getValueAt(setar,0).toString());
txtSerie.setText(TblClientes.getModel().getValueAt(setar,1).toString());
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/

private void btnEnviarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    alterar();
}                                         

private void btnProcuraActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:
    consulta_serial();
}                                          
 
private void btnPreencheActionPerformed(java.awt.event.ActionEvent evt) {                                            
    // TODO add your handling code here:
    setar_campos();
}                                           

private void btnExcluiActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    remover();
}                                         


private void cmbSerialItemStateChanged(java.awt.event.ItemEvent evt) {                                           
    // TODO add your handling code here:
    
}

eu faria o seguinte, assim q você fizesse as alterações.
você colocasse seu combo para um novo modelo default.
assim ele ficaria zerado.
Exemplo,
cmbSerial = new DefaultListModel();
nomeDoSeuCombo.setModel(cmbSerial);
//e agora executa um método que vc ja possui.
populaJcmbSerial();

Consegui fazer assim:
cmbSerial.removeAllItems();
//e agora executa o método que chama o combo…
populaJcmbSerial();

Ele faz o tal do ‘refresh’.

Obrigado a todos que ajudaram.

1 curtida

Mais prático, se puder, sinalize como solucionado para ajudar os outros.