Aula XVI Apesar da aparência, a janela não é fechada quando acionamos a opção fechar. Isto ocorre porque não existem métodos processadores de eventos capazes de receber tal mensagem encerrando a aplicação. Para encerrar a aplicação devemos encerrar a JVM com um CTRL + C na janela de console exibida. Para que a janela tenha seus eventos processados é necessário implementarmos um processamento de eventos específico. Existem basicamente duas opções de solução para essa questão: (i) utilizar a classe WindowAdapter ou (ii) utilizar a inteface WindowListener. A classe WindowAdapter é abstrata e necessita portanto ser estendida para ser implementada. Como o exemplo anterior necessita estender a classe Frame temos um impasse: java não oferece herança múltipla, portanto devemos derivar a classe de nossa aplicação de classe Frame e implementar uma classe distinta para o processador de eventos, baseado na classe WindowAdapter. A outra opção, exige que implementemos nossa classe como uma interface do tipo WindowListener. Embora precisemos de um único método, a interface WindowListener exige a implementação de 7 diferentes métodos, dos quais apenas um será utilizado. Exemplo (WindowListener) public class FrameDemo1 extends Frame implements WindowListener FrameDemo1 f = new FrameDemo1(); public FrameDemo1() super("utilizando WindowListener"); setsize(320,240); addwindowlistener(this); //métodos da interface WindowListener
public void windowclosed(windowevent e) public void windowiconified(windowevent e) public void windowopened(windowevent e) public void windowdeiconified(windowevent e) public void windowactivated(windowevent e) public void windowdeactivated(windowevent e) Exemplo (WindowAdapter) class FecharJanela extends WindowAdapter public class FrameDemo2 extends Frame public FrameDemo2() super("utilizando WindowAdapter"); setsize(320,240); FrameDemo2 f = new FrameDemo2(); f.addwindowlistener(new FecharJanela());
Exemplo utilizando a classe toolkit na determinação do tamanho da tela através de um objeto chamado Dimension, que encapsula altura (height) e largura (width) de um componente. Com o uso desses dados determinamos dinamicamente o tamanho e posição da janela. class FecharJanela extends WindowAdapter public class FrameDemo3 extends Frame public FrameDemo3() super("utilizando a classe Toolkit"); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); setsize(d.width/2, d.height/2); setlocation(d.width/2, d.height/2); setbackground(new Color (0,128,128)); FrameDemo3 f = new FrameDemo3(); f.addwindowlistener(new FecharJanela());
Label O componente Label, conhecido como rótulo, é destinado a exibição de texto dentro de quaisquer componentes do tipo container. Na tabela abaixo, temos os principais métodos desta classe: Método Descrição Label() Label(String) getalignment() gettext() setalignment(int) settext(string) Cónstrói um novo rótulo sem texto Constrói um novo rótulo com o texto dado Obtêm o alinhamento do rótulo Obtêm o texto do rótulo Especifica o alinhamento do rótulo Especifica o texto do rótulo Exemplo: class FechaJanela extends WindowAdapter public class LabelDemo extends Frame private Label l1; private Label l2; public LabelDemo() super("exemplo de Label"); setsize(100,200); //instanciação das labels l1 = new Label("Uma label"); l2 = new Label("Duas Label", Label.CENTER);
//alterando o layout do frame setlayout(new FlowLayout()); //adicionando os componentes add(l1); add(l2); LabelDemo l = new LabelDemo(); l.addwindowlistener(new FechaJanela()); l.show(); Se a janela for redimensionada, os rótulos são automaticamente reposicionados, o que pode modificar o efeito pretendido pelo alinhamento individual de cada texto associado aos componentes Label.