Oi, seguinte, qdo eu fecho uma tela, e a abro novamente, ela volta da forma como estava qdo eu a fechei … ou seja tha mais p um hide do que um dispose …
Como eu realmente fecho uma tela, ou seja, descarrego uma classe ??
Oi, seguinte, qdo eu fecho uma tela, e a abro novamente, ela volta da forma como estava qdo eu a fechei … ou seja tha mais p um hide do que um dispose …
Como eu realmente fecho uma tela, ou seja, descarrego uma classe ??
Você tah usando swing?
Se sim e tem um JFrame com um form sugiro que vc ao clicar em [x] faça o HIDE e somente limpe os campos para os valores que deseja. Se você fizer o DISPOSE vai perder em performance ao abrir novamente a janela…
Tou usando Swing sim.
Mas se eu usar o Hide, num vai ficando pesado, a medida q eu vou abrindo e fechando janelas? Num temo como fechar completamente?
entao… quando vc vai usar uma janela novamente o indicado é que use o HIDE, mas se nao for usar faça o dispose, mas é claro deve haver um bom senso, vc nao vai deixar 100 janelas em HIDE tbm…
verifique o metodo setDefaultCloseOperation() no javadoc do JFrame
Então Marcos, eu estou usando o dispose e o defaultCloseOperation ta Dispose().
É um sistema normal, eu não quero manter uma janela na memoria, quero finalizar ela.
Por exemplo, Tenho uma tela principal do sistema, q chama a tela de cadastro de usuarios.
Qdo eu fecho a tela de usuarios e preciso abrir novamente, ela volta como estava qdo eu fechei, ou seja, não foi finalizada, apenas foi tipo um hide, entendeu?
Eu quero finalizar a tela usuario completamente…
posta o trexo do codigo ai…
Bom eu exibo a tela com um setVisible(true) …
Aki o codigo de uma tela p exemplo:
/*
package br.com.fastcommand.browsers;
import java.awt.;
import java.awt.event.;
import javax.swing.*;
import br.com.fastcommand.auxiliares.WindowUtilities ;
import br.com.fastcommand.sistema.telaPrincipal ;
import javax.swing.table.DefaultTableModel;
/**
*
@author odair
*/
public class jFrmBrowseEmpresas extends JDialog {
// - Declaracao da classe como static
public static jFrmBrowseEmpresas browseEmpresa = new jFrmBrowseEmpresas(
telaPrincipal.telaPrincipal) ;
private String vValor;
// javax.swing.jTable.DefaultTableModel dtm = (javax.swing.jTable.DefaultTableModel)jTable.getModel();
/** Creates new form jFrmModelo */
public jFrmBrowseEmpresas( JFrame pai ) {
super(pai) ;
WindowUtilities.setNativeLookAndFeel();
initComponents();
Dimension video = Toolkit.getDefaultToolkit().getScreenSize() ;
Dimension form = getSize() ;
setLocation((video.width-form.width)/2,(video.height-form.height)/2);
setModal(true) ;
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jLblTitulo = new javax.swing.JLabel();
jPnlContainer = new javax.swing.JPanel();
jSPane = new javax.swing.JScrollPane();
jTblDados = new javax.swing.JTable();
jLblAjuda = new javax.swing.JLabel();
jBtncancela = new javax.swing.JButton();
jBtnConfirma = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setFont(new java.awt.Font("Courier New", 1, 10));
jLblTitulo.setBackground(new java.awt.Color(0, 51, 255));
jLblTitulo.setFont(new java.awt.Font("Courier New", 1, 12));
jLblTitulo.setForeground(new java.awt.Color(255, 255, 255));
jLblTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLblTitulo.setText("BROWSER DE EMPRESAS");
jLblTitulo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
jLblTitulo.setOpaque(true);
jPnlContainer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jTblDados.setFont(new java.awt.Font("Courier New", 1, 12));
jTblDados.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"CODIGO", "RAZAO", "PESSOA", "CNPJ"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jSPane.setViewportView(jTblDados);
javax.swing.GroupLayout jPnlContainerLayout = new javax.swing.GroupLayout(jPnlContainer);
jPnlContainer.setLayout(jPnlContainerLayout);
jPnlContainerLayout.setHorizontalGroup(
jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 508, Short.MAX_VALUE)
);
jPnlContainerLayout.setVerticalGroup(
jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)
);
jLblAjuda.setBackground(new java.awt.Color(51, 0, 255));
jLblAjuda.setFont(new java.awt.Font("Courier New", 1, 12));
jLblAjuda.setForeground(new java.awt.Color(255, 255, 255));
jLblAjuda.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLblAjuda.setText("SIBEX SISTEMAS");
jLblAjuda.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
jLblAjuda.setOpaque(true);
jBtncancela.setFont(new java.awt.Font("Courier New", 1, 11));
jBtncancela.setForeground(new java.awt.Color(204, 0, 51));
jBtncancela.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Cancelar.GIF")));
jBtncancela.setText("CANCELA");
jBtnConfirma.setFont(new java.awt.Font("Courier New", 1, 11));
jBtnConfirma.setForeground(new java.awt.Color(204, 0, 51));
jBtnConfirma.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Confirma.gif")));
jBtnConfirma.setText("CONFIRMA");
jBtnConfirma.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jBtnConfirmaMouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLblTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)
.addComponent(jPnlContainer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(292, 292, 292)
.addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jBtnConfirma))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLblAjuda, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPnlContainer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jBtnConfirma, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLblAjuda, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jBtnConfirmaMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
//JOptionPane.showMessageDialog(null,(String)jTblDados.getValueAt(jTblDados.getSelectedRows() , jTblDados.getSelectedColumn()),“Erro no Banco de dados”,2);
int linha = jTblDados.getSelectedRow();
int coluna = 0; // x é o número da coluna dentro de sua tabela, da qual
//você quer resgatar o valor
vValor = (String)jTblDados.getModel().getValueAt(linha, coluna);
JOptionPane.showMessageDialog(null,vValor,"Erro no Banco de dados",2);
}
// Variables declaration - do not modify
private javax.swing.JButton jBtnConfirma;
private javax.swing.JButton jBtncancela;
private javax.swing.JLabel jLblAjuda;
private javax.swing.JLabel jLblTitulo;
private javax.swing.JPanel jPnlContainer;
public javax.swing.JScrollPane jSPane;
public javax.swing.JTable jTblDados;
// End of variables declaration
}
Editando o post para codigo…
[code]/*
package br.com.fastcommand.browsers;
import java.awt.;
import java.awt.event.;
import javax.swing.*;
import br.com.fastcommand.auxiliares.WindowUtilities ;
import br.com.fastcommand.sistema.telaPrincipal ;
import javax.swing.table.DefaultTableModel;
/**
*
@author odair
*/
public class jFrmBrowseEmpresas extends JDialog {
// - Declaracao da classe como static
public static jFrmBrowseEmpresas browseEmpresa = new jFrmBrowseEmpresas(
telaPrincipal.telaPrincipal) ;
private String vValor;
// javax.swing.jTable.DefaultTableModel dtm = (javax.swing.jTable.DefaultTableModel)jTable.getModel();
/** Creates new form jFrmModelo */
public jFrmBrowseEmpresas( JFrame pai ) {
super(pai) ;
WindowUtilities.setNativeLookAndFeel();
initComponents();
Dimension video = Toolkit.getDefaultToolkit().getScreenSize() ;
Dimension form = getSize() ;
setLocation((video.width-form.width)/2,(video.height-form.height)/2);
setModal(true) ;
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jLblTitulo = new javax.swing.JLabel();
jPnlContainer = new javax.swing.JPanel();
jSPane = new javax.swing.JScrollPane();
jTblDados = new javax.swing.JTable();
jLblAjuda = new javax.swing.JLabel();
jBtncancela = new javax.swing.JButton();
jBtnConfirma = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setFont(new java.awt.Font("Courier New", 1, 10));
jLblTitulo.setBackground(new java.awt.Color(0, 51, 255));
jLblTitulo.setFont(new java.awt.Font("Courier New", 1, 12));
jLblTitulo.setForeground(new java.awt.Color(255, 255, 255));
jLblTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLblTitulo.setText("BROWSER DE EMPRESAS");
jLblTitulo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
jLblTitulo.setOpaque(true);
jPnlContainer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jTblDados.setFont(new java.awt.Font("Courier New", 1, 12));
jTblDados.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"CODIGO", "RAZAO", "PESSOA", "CNPJ"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jSPane.setViewportView(jTblDados);
javax.swing.GroupLayout jPnlContainerLayout = new javax.swing.GroupLayout(jPnlContainer);
jPnlContainer.setLayout(jPnlContainerLayout);
jPnlContainerLayout.setHorizontalGroup(
jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 508, Short.MAX_VALUE)
);
jPnlContainerLayout.setVerticalGroup(
jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)
);
jLblAjuda.setBackground(new java.awt.Color(51, 0, 255));
jLblAjuda.setFont(new java.awt.Font("Courier New", 1, 12));
jLblAjuda.setForeground(new java.awt.Color(255, 255, 255));
jLblAjuda.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLblAjuda.setText("SIBEX SISTEMAS");
jLblAjuda.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
jLblAjuda.setOpaque(true);
jBtncancela.setFont(new java.awt.Font("Courier New", 1, 11));
jBtncancela.setForeground(new java.awt.Color(204, 0, 51));
jBtncancela.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Cancelar.GIF")));
jBtncancela.setText("CANCELA");
jBtnConfirma.setFont(new java.awt.Font("Courier New", 1, 11));
jBtnConfirma.setForeground(new java.awt.Color(204, 0, 51));
jBtnConfirma.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Confirma.gif")));
jBtnConfirma.setText("CONFIRMA");
jBtnConfirma.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jBtnConfirmaMouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLblTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)
.addComponent(jPnlContainer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(292, 292, 292)
.addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jBtnConfirma))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLblAjuda, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPnlContainer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jBtnConfirma, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLblAjuda, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jBtnConfirmaMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
//JOptionPane.showMessageDialog(null,(String)jTblDados.getValueAt(jTblDados.getSelectedRows() , jTblDados.getSelectedColumn()),“Erro no Banco de dados”,2);
int linha = jTblDados.getSelectedRow();
int coluna = 0; // x é o número da coluna dentro de sua tabela, da qual
//você quer resgatar o valor
vValor = (String)jTblDados.getModel().getValueAt(linha, coluna);
JOptionPane.showMessageDialog(null,vValor,"Erro no Banco de dados",2);
}
// Variables declaration - do not modify
private javax.swing.JButton jBtnConfirma;
private javax.swing.JButton jBtncancela;
private javax.swing.JLabel jLblAjuda;
private javax.swing.JLabel jLblTitulo;
private javax.swing.JPanel jPnlContainer;
public javax.swing.JScrollPane jSPane;
public javax.swing.JTable jTblDados;
// End of variables declaration
}[/code]
cara, pq vc chama a classe de jFrmBrowseEmpresas e extends JDialog?
Bom o nome pq, considero uma classe como um formulario para exibição, e BrowseEmpresas, pq sera realmente um Browser de Empresas…
Qto a Dilog, pq quero uma tela q seja modal e q tenha o JFrame pai a tela principal …
Pq ? Tah tdo errado … ? …rs
Fiz um teste aqui com o JDialog q vc usou e ele não fecha com dispose, mas com o JFrame fecha.
Acredito que vc possa estar utilizando uma variavel para esse dialogo e ela nao esteja sendo marcada para o garbagecolector, tente forçar-lo
Kramba , me desculpa , mas falou grego p mim …rs,
num sei como fazer isso q vc dissee …
System.gc();
não tenho certeza se vai funcionar…
outra opção é fazer um metodo q faça o dispose pra vc, tinha um exemplo disso para jframa, acho q funciona pro jdialog tbm… vou ver se acho aqui…
O problema de dar o hide(), no lugar do dispose() é que a janela fica ocupando memória. Se é isso que você chamou de “mais pesado”, sim.
Na verdade, essé um trade-off bastante comum no swing, ou você gasta um pouco mais de memória, ou você gasta mais processamento.
Você pode dar um dispose, setar sua variável da janela para null e reconstruí-la quando for abri-la novamente (com new mesmo). - ocupa menos memória, mas exige mais processador
Ou pode limpar os campos e dar um hide e reexibi-la. - ocupando mais memória, mas aliviando o processador.
Hoje a maior parte dos micros tem abundância dos dois recursos e, a menos que a sua janela seja muito pesada, ou que possua objetos de inicialização lenta, o usuário não vai notar o tempo de criação e abertura dela.
A melhor abordagem? Se nenhuma das duas for problema, use a que deixa o código mais simples. Na minha opinião é reconstruir a janela. Evita fazer um método inteiro de limpeza.
Não custa ter também um profiler na mão, caso o usuário reclame de performance.
Código gerado por editores gráficos definitivamente são uma caca…mas deixemos esse comentário pra lá!
Será que o problema todo não está no fato de você estar criando a instância da janela numa variável estática e pública?
Pelo que entendi, para exibir a janela você acessa a variável estática browseEmpresa, que é a instância da janela. Já tentou, ao invés de acessar essa variável, criar uma instância da classe?
Até porque, se o seu problema é quantidade de memória utilizada, está fazendo errado. Ao utilizar uma variável estática, assim que o programa é carregado pela máquina virtual é criada uma instância da classe. Portanto, a instância da classe já está na memória, mesmo sem estar sendo usada.
Sinto que você está com alguns problemas conceituais…