Iniciando a seção Swing (não pense em outra coisa, esse blog é de Java!!), vou postar um código-exemplo de WindowListener, mais precisamente o evento “Fechando a janela”, com esse exemplo é possível escolher qualquer comportamento ao fechar a jenela, só vai depender da sua criatividade:
Quer impossibilitar o fechamento? A vontade!
Quer enviar a janela para a bandeja do sistema? Você pode! (este exemplo não ensina a fazer isso, mas darei algumas dicas desta “POG” no final).
Quer impossibilitar o fechamento? A vontade!
Quer enviar a janela para a bandeja do sistema? Você pode! (este exemplo não ensina a fazer isso, mas darei algumas dicas desta “POG” no final).
Enfim, vamos ao que interessa, capturar o evento windowClosing, ou fechando a janela para os mais íntimos.
//Importação das bibliotecas que iremos precisar
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.*;
import javax.swing.*;public class JanelaTeste extends JFrame{private static void criaJanelaExemploGUI() {
//Cria uma nova janela, instanciando um JFrame, afinal para fechar
//uma janela, primeiro precisamos da janela! JFrame frame = new JFrame(“Janela Teste – Brincando com o botão Fechar”);
//Seta o comportamento padrão para a ação “Fechar” da janela.
//Neste caso, estamos informando “Não faça nada ao fechar” frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//Esse bloco não tem a menor necessidade, coloquei apenas para ter algo
//adicional no código, neste caso a primeira linha dentro do TRY recolhe
//todos os looks instalados na máquina, depois eu seleciona o terceira da lista.
//lembrando que o array começa em zero, então 0, 1, 2…
try {
UIManager.LookAndFeelInfo[] instalados = UIManager.getInstalledLookAndFeels();
UIManager.setLookAndFeel(instalados[2].getClassName());
}catch(Exception e) {
e.printStackTrace();
}
//Seta uma dimensão para a janela, que será assumida na inicialização;
//porporção larguxa x altura
frame.setSize(400,100);
//Adiciona o WindowListener ao frame, este listener possibilita capturar todos os eventos
//da janela, ex.: Fechando, Minimizando, Restaurando, Recebendo Foco, Perdendo Foco, etç.
frame.addWindowListener(new WindowAdapter() {
//aqui estou informando que quero o evento fechando a janela public void windowClosing (WindowEvent e) {
//Nesta parte devemos colocar todo o que queremos que aconteça quando o botão
//fechar for pressionado, neste caso apenas é exibida uma mensagem simples
//e depois a aplicação é encerrada. JOptionPane.showMessageDialog(null,“A janela será fechada.”,
“Você clicou em fechar.”,JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
});
//Deixa o frame visivel aos olhos dos mortais. frame.setVisible(true);
}
public static void main(String[] args){
criaJanelaExemploGUI();
}}
Alguns comentários adicionais…
No comando “frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);“, estou setando a operação padrão de fechamento do frame, neste caso a opção desejada foi uma constante da classe JFrame, a constante DO_NOTHING_ON_CLOSE, não faça nada ao fechar, porém não existe somente esta, outras constantes podem ser passadas como parâmetros:
DISPOSE_ON_CLOSE: Induzir ao Fechar, fecha a janela.
HIDE_ON_CLOSE: Esconder ao Fechar, se quiser ver a jenela novamente basta aplicar um “setVisible(true)”.
EXIT_ON_CLOSE: Sai ao fechar, sai do sistema.
DISPOSE_ON_CLOSE: Induzir ao Fechar, fecha a janela.
HIDE_ON_CLOSE: Esconder ao Fechar, se quiser ver a jenela novamente basta aplicar um “setVisible(true)”.
EXIT_ON_CLOSE: Sai ao fechar, sai do sistema.
Dentro do listener (windowListener), estamos invocando o evento windowClosing, para fiscalizar quando a janela é fechada, existem vários outros eventos úteis que podem ser utilizados, como por exemplo:
windowClosed: Invocado quando a janela é fechada
windowLostFocus: Invocado quando a janela perde o foco.
windowIconified: Invocado quando a janela é minimizada.
windowOpened: Invocado quando a janela é aberta.
E outros mais, que podem ser consultados na API da classe WindowAdapter.
windowClosed: Invocado quando a janela é fechada
windowLostFocus: Invocado quando a janela perde o foco.
windowIconified: Invocado quando a janela é minimizada.
windowOpened: Invocado quando a janela é aberta.
E outros mais, que podem ser consultados na API da classe WindowAdapter.
Agora sobre enviar a janela para a bandeja do sistema (ao lado do reógio), que comentei no inicio do tópico, bem isso não existe nenhum programa (ao menos em java) faz isso, o que acontece é o seguinte: Em determinado momento, quando é decidido que o programa tem que ir para a bandeja do sistema, deve-se esconder a janela, isso mesmo “setVisible(false)”, desta forma a janela some da visão do usuário, porém continua ativa.
Mas como fazer aquele icone com um menu bonitinho do lado do relógio? Para isso é preciso utilizar algumas artimanhas da classe TrayIcon para colocar um icone na bandeja, mas o icone por si só não faz nada! É preciso também criar um MouseAdapter (mouseClicked, mousePressed, etç, basta seguir o mesmo exemplo do WindowAdapter acima), para capturar o evento do mouse clicando neste icone e quando isso for feito devemos abrir um JPopupMenu, para abrir um menuzinho com as opções “Mostrar Janela”, “Sair”, “Etç, etç, etç”.
Dependendo da sua criatividade e boa vontade, da até pra fazer um efeitozinho da janela sendo “enviada” para a bandeja, exemplo: Um loop que vai alterando o tamanho e a posição da janela fazendo-a ficar menor e mais próxima do relógio antes de a escondermos.
Mas como fazer aquele icone com um menu bonitinho do lado do relógio? Para isso é preciso utilizar algumas artimanhas da classe TrayIcon para colocar um icone na bandeja, mas o icone por si só não faz nada! É preciso também criar um MouseAdapter (mouseClicked, mousePressed, etç, basta seguir o mesmo exemplo do WindowAdapter acima), para capturar o evento do mouse clicando neste icone e quando isso for feito devemos abrir um JPopupMenu, para abrir um menuzinho com as opções “Mostrar Janela”, “Sair”, “Etç, etç, etç”.
Dependendo da sua criatividade e boa vontade, da até pra fazer um efeitozinho da janela sendo “enviada” para a bandeja, exemplo: Um loop que vai alterando o tamanho e a posição da janela fazendo-a ficar menor e mais próxima do relógio antes de a escondermos.
Fazer um exemplo/modelo de uma janela sendo enviada para a bandeja do sistema está na minha lista de tarefas, em breve postarei aqui!
0 comentários:
Postar um comentário
Alguma dúvida?