Esconder JFrame sem matar o processo?

6 respostas
F

Boa tarde a todos!

Gostaria de saber como faço para esconder um JFrame sem matar o processo, pois toda vez que utilizo o setVisible() ou o show() / hide() ele mata o processo (JTable carregada)…

Alguém tem uma idéia?

6 Respostas

S

Hum…o setVisible(false) não devia terminar o processo, digo eu.

De qualquer forma podes tentar assim:

janela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Espero ter sido útil :wink:

F

Pois é, estou justamente fazendo isso, é que estou colocando o setVisible(false) no evento de minimizar, pois estou usando o System Tray, dai quando clico no PopupMenu para mostrar (setVisible(true), o processo volta do inicio.

=/

S

Posta aí o teu código, assim é melhor para ajudar.

F
Bem, vou postar as partes relevantes: *Quando eu clico no trayIcon sem minimizar a janela, ele abre uma nova igual... Main.java:
public static void main(String[] args) throws AWTException {
        
        SplashScreen.Splash splash = new SplashScreen.Splash(5000);
        splash.iniciarSplash();
        new JanelaPrincipal().setVisible(true);
        new Bandeja().carregarBandeja();
        
    }
JanelaPrincipal.java:
public JanelaPrincipal() {
        
        initComponents();
        setLocationRelativeTo(null);
        setExtendedState(MAXIMIZED_BOTH);
        
        Image imageIcon = new ImageIcon(getClass().getResource("/Imagens/icone.gif")).getImage();
        setIconImage((Image) imageIcon);
        
        ConnectionFactory.getConnection();
		
        GregorianCalendar calendar = new GregorianCalendar();
        SimpleDateFormat formatador = new SimpleDateFormat("dd' de 'MMMMM' de 'yyyy' '");
        jLabelData.setText(formatador.format(calendar.getTime()));
        
        FormatarTabelas.alinhar(); 
        AtualizarDados.detalhes();

    }

private void formWindowIconified(java.awt.event.WindowEvent evt) {                                     

    setVisible(false);
    
}
Bandeja.java:
trayIcon.addMouseListener(new MouseAdapter() {  
            public void mouseClicked(MouseEvent e) { 
                
                if (e.getClickCount() == 2 && e.getButton()==MouseEvent.BUTTON1) {

                    JanelaPrincipal janela = new JanelaPrincipal();
                    janela.setVisible(true);

                }
                             
            }  
        });
S

OK, acontece isto porque tu mandas criar uma nova janela de cada vez que se clica no tray:

//bandeja.java
JanelaPrincipal janela = new JanelaPrincipal();

Posto isto, ao clicares no ícone da tray não estás a exercer qualquer acção na janela principal.

Sugestão: Atribui um nome á instância de JanelaPrincipal que crias no método main

JanelaPrincipal janela = new JanelaPrincipal().setVisible(true); //Em vez de  new JanelaPrincipal().setVisible(true);

Agora já podes manipular(mais facilmente) a janela pretendida.

Sugestão nº2: Direcciona o evento do tray para a janela principal corrente.

trayIcon.addMouseListener(new MouseAdapter() {    
             public void mouseClicked(MouseEvent e) {   
                   
                 if (e.getClickCount() == 2 && e.getButton()==MouseEvent.BUTTON1) {  
   
                     janela.setVisible(false);   
   
                 }  
                                
             }    
         });

Tenta desta forma.

F

Perfeito! Isso mesmo!

Primeiro eu coloquei no main para iniciar apenas a Bandeja, depois pela bandeja eu iniciava a JanelaPrincipal e coloquei como você falou, dai funcionou perfeitamente!

vlw pela ajuda!!!

:smiley:

Criado 27 de setembro de 2008
Ultima resposta 28 de set. de 2008
Respostas 6
Participantes 2