Dar um 'refresh' em um JInternalFrame

9 respostas Resolvido
A

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

9 Respostas

A

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.

S

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?

C

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?

A

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.

C

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”

A

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:
    
}
C
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();
A
Solucao aceita
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.

C

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

Criado 21 de julho de 2017
Ultima resposta 21 de jul. de 2017
Respostas 9
Participantes 4