A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR -

Apresentações semelhantes


Apresentação em tema: "Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR -"— Transcrição da apresentação:

1 Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR -

2 Aplicações Standalone Gráficas Trabalham com componentes de interface gráfica; Tais componentes fazem parte do Abstract Windows Toolkit (AWT); É um pacote de classes dedicado a interface gráfica, eventos, etc; A partir do JDK 1.2 (1.1 opcional) há o pacote Swing para interface.

3 AWT - Janelas

4 AWT - Exemplo de Aplicação StandAlone Gráfica public class App { Button b; public App() { this(); } public App(String titulo) { super(titulo); b = new Button(Ok); enableEvents(WindowEvent.WINDOW_CLOSING); pack(): }

5 public void processWindowEvent(WindowEvent e) { switch (e.getID()) { case e.WINDOW_CLOSING: system.exit(0); return; default: super.processWindowEvent(e); } public static void main(String args[]) { App a = new App(Janela); a.setVisible(true); } obs: no exemplo acima o código system.exit(0) encerra a aplicação. No caso de uma janela modal, o correto seria setVisible(false) para fechar a janela e entregar o controle à janela principal da aplicação.

6 AWT - Janelas A classe Window fornece apenas o comportamento geral de uma janela, não podemos instanciá-la ; Normalmente utilizamos instâncias de Frame ou Dialog.

7 AWT - Janelas Frame fornece um título para a janela, caixas para fechá-la, e outras características específicas de plataforma ; Frame também permite que sejam adicionados menus.

8 AWT - Janelas Dialog é uma forma mais limitada de Frame, que tipicamente não tem um título; FileDialog é uma subclasse de dialog, que fornece suporte para seleção de arquivos.

9 AWT - Frames Frames são janelas que são independentes de um applet e do browser que os contém ; Frames podem ter menus ; Um frame é uma janela com título, menu e outras características de uma janela.

10 AWT - Frames Para criarmos um frame utilizamos : –new Frame() : cria um frame sem um título ; –new Frame(String str) : cria um frame com o título indica por srt. Frames se comportam de maneira parecida com panels ; Layouts são selecionados e componentes são adicionados da mesma maneira.

11 AWT - Frames No exemplo abaixo, criamos um frame, definimos um layout e inserimos dois botões : win = new Frame(Minha Janela); win.setLayout(new GridLayout(2,1); win.add(new Button(Botão 1)); win.add(new Button(Botão 2)); Podemos determinar o tamanho do frame utilizando o método resize.

12 AWT - Frames Outro método é, ao invés de usar o resize, fazer com que o frame tenha o tamanho mínimo para conter todos os seus componentes ; O método pack implementa essa funcionalidade ; Devemos chamar esse método apenas depois de adicionarmos os componentes.

13 AWT - Frames Um frame normalmente está invisível quando o criamos ; Para exibi-lo, precisamos usar o método setVisible do frame : win.setVisible(true); Para esconder o frame utilizamos o mesmo método : win.setVisible(false);

14 AWT - Frame Apesar da janela aparecer, não há um método para destruí-la ; Caso ela estivesse visível na tela quando o browser fosse fechado, ela continuaria a rodar ; A única maneira então é destruir a tarefa no gerenciador de tarefas.

15 AWT - Frame Para habilitarmos a capacidade da janela se destruir, precisamos capturar o evento do fechamento da janela (X no canto superior direito da janela).

16 AWT - Frame Para capturarmos esse evento, tratamos um evento de WindowListner ou habilitamos a janela para tratar de evento; Para habilitarmos o tratamento de eventos (mais simples em código), utilizamos o seguinte código no construtor : enableEvents(WindowEvent.WINDOW_CLOSING);

17 AWT - Frame Também devemos implementar o seguinte método: public void processWindowEvent(WindowEvent e) { switch (e.getID()) { case e.WINDOW_CLOSING: setVisible(false); return; default: super.processWindowEvent(e); }

18 AWT - Menus Cada janela criada pode ter a sua própria barra de menu ; Cada barra de menu pode ter diversos menus ; Cada menu pode ter itens de menu ; Cada um desses itens são representados pelas classes MenuBar, Menu e MenuItem.

19 AWT - Menus

20 Para criar um menu para uma dada janela, crie uma nova instância da classe MenuBar: MenuBar mbar = new MenuBar(); Para ver este menu como o menu default para a janela, use o método setMenuBar() da classe Frame.

21 AWT - Menus Para adicionar menus individuais é necessário criá-los e efetivamente adicioná- los ao menu : Menu myMenu = new Menu(Arquivo); mbar.add(myMenu); Os itens serão adicionados da esquerda para a direita.

22 AWT - Menus Alguns sistemas fornecem um menu especial para ajuda, que é desenhado no canto direito da barra ; Podemos indicar que um menu em específico é um help menu utilizamos o método setHelpMenu() : Menu help = new Menu(Help); mbar.add(help); mbar.setHelpMenu(helpmenu);

23 AWT - Menus Se por algum motivo quisermos evitar que o usuário selecione um menu, utilizamos o método disable() do menu, e enable() para torná-lo disponível novamente : myMenu.disable(); myMenu.enable();

24 AWT - Menus Há quatro tipos de itens de menus que podemos adicionar : –MenuItem : itens regulares de menu ; –CheckBoxMenuItem : itens de menu que podem ser marcados/desmarcados ; –Outros menus, com seus próprios itens ; –Separadores, que separam grupos uns dos outros.

25 AWT - Menus Itens de menu são adicionados usando a classe MenuItem ; Adicionamo-os a um menu com o método add : Menu meumenu = new Menu(Arquivo); meumenu.add(new MenuItem(Abre); meumenu.add(new MenuItem(Fecha);

26 AWT - Menus Para adicionarmos um submenu ao menu, criamos um novo menu e o adicionamos ao menu : Menu meumenu = new Menu(Arquivo); meumenu.add(new MenuItem(Abre); meumenu.add(new MenuItem(Fecha); Menu recente = new Menu(Recentes); meumenu.add(recente);

27 AWT - Menus Para criarmos um item de menu que seja selecionável, criamos uma intância de CheckBoxMenuItem ; O criamos como um item de menu e o adicionamos ; CheckBoxMenuItem coords = new CheckBoxMenuItem(Mostra Coordenadas); meumenu.add(coords);

28 AWT - Menus O último elemento que podemos inserir num menu são os separadores ; É uma linha que separa grupos de itens de menu ; O separador é um item com um - : MenuItem separador = new Menuitem(-); meumenu.add(separador);

29 AWT - Menus A ação de selecionar um item de menu gera um evento ; O tratamento deve ser feito no método com os listners ActionListner (itens de menu) e ItemListner (CheckboxMenuItem).

30 Aplicações Standalone Gráficas Tamanho da Janela Para descobrirmos o tamanho, utilizamos o método getSize, e as variáveis width e height da clase Dimension retornada ; getSize().heigth retorna a altura do applet ; getSize().width retorna a largura do applet; Para modificarmos o tamanho da janela, utilizamos o método setSize.

31 JAVA - Interfaces com AWT AWT fornece : –Um conjunto completo para interface gráfica, incluindo menus, scrollbars, botões, etc; –Suporte a containers de interface gráfica; –Um sistema de eventos para gerenciar eventos de sistema e do usuário entre os componentes AWT; –Mecanismos para dispor componentes que permitem independência de plataforma.

32 JAVA - Interfaces com AWT A idéia básica por trás de AWT é que um programa JAVA com interface gráfica é um aninhamento de componentes, começando na janela mais externa e descendo até o menor componente de interface; Todas as classes componentes da AWT estão no pacote java.awt.

33 JAVA - Interfaces com AWT Os componentes que podemos trabalhar em AWT são : –Containers :são componentes AWT gerais que podem conter outros componentes AWT, incluindo outros containers. O container mais comum é o panel, que é um container que pode ser exibido na tela. –Canvas : Um canvas é uma superfície para desenhos. Mesmo que você possa desenhar em containers (todos exemplos até agora foram feitos assim), canvas são preferíveis para desenhar imagens ou outras operações gráficas.

34 JAVA - Interfaces com AWT –Componentes de Interface Usuário : São os botões, listas, menus pop-up, check boxes e outros elementos típicos de interface gráfica ; –Componentes de Construção de Janela : São as janelas, frames, barras de menu, etc. Eles são separados dos componente anteriores por não serem usados em applets.

35 JAVA - Interfaces com AWT

36 AWT - Componentes Básicos Componentes Básicos de Interface : –O componente AWT mais simples é o componente de interface usuário ; –É possível inserí-los sem grandes dificuldades num applet no método init.

37 AWT - Componentes Básicos Tipos de componentes IU básicos : –Labels ; –Botões ; –Check boxes ; –Menus de escolha ; –Text fields.

38 AWT - Componentes Básicos Exemplo : Adicionando um botão a um applet : public void init() { Button b = new Button(OK); add(b); }

39 AWT - Componentes Básicos Apesar de ser possível utilizar o código anterior para inserir um componente, este é desaconselhável; Mais tarde, se for necessário referenciar o botão, não haverá uma instância acessível para os métodos do applet; É preferível ter um atributo da classe para armazenar as referências.

40 AWT - Componentes Básicos Class App extends Applet { Button b; public void init() { b = new Button(OK); add(b); }...

41 AWT - Componentes Básicos O código anterior apenas cria uma instância de botão com o texto OK impresso sobre a sua face; O botão é simplesmente inserido no applet, na primeira posição livre (isto é, sem componentes).

42 AWT - Labels Componente mais simples; Consiste de um texto (uma string) que é desenhada na tela; Um label não é editável, é apenas mais um componente na tela.

43 AWT - Labels Um label tem vantagens sobre uma string ordinária desenhada na tela: –Não é preciso redesenhar labels manualmente, AWT cuida disso; –Labels seguem um layout, e podem ser alinhados com outros elementos (o que veremos mais tarde);

44 AWT - Labels Para criarmos um label, utilizamos um dos seguintes construtores: –Label() : cria um label sem nenhum texto; –Label(String) : cria um label com um texto especificado por String; –Label(String, int) : cria um label com o texto especificado por String e alinhado.

45 AWT - Labels No último construtor, o parâmetro inteiro indica um alinhamento do texto ; Tal parâmetro pode ser obtido da própria classe Label, através das constantes : –Label.LEFT; –Label.RIGHT; –Label.CENTER.

46 AWT - Labels Métodos de um label : –getText() : retorna o texto associado a um label; –setText(String) : armazena um String específica no label; –getAlignment() : retorna um inteiro representando o alinhamento do label; –setAlignment(int) : Muda o alinhamento do texto.

47 AWT - Botões Botões são componentes simples de interface usuário que disparam alguma ação quando são pressionados ; Por exemplo, uma aplicação pode ter um botão EXIT que feche a aplicação quando pressionado.

48 AWT - Botões Para criar-se um botão, podemos usar um dos seguintes construtores : –Button() : cria um botão sem nenhum texto impresso na face ; –Button(String) : cria um botão com o texto especificado em String impresso em sua face.

49 AWT - Botões Exemplo para criar-se botões : public void init() { add(new Button(Ok); add(new Button(Cancel); }

50 AWT - Check Boxes Check boxes são componentes que tem dois estados : ligado ou desligado. A mudança de estado no check box dispara um evento; Seu estado será utilizado em um evento, como característica opcional.

51 AWT - Check Boxes Check boxes são usadas de duas maneiras: –Não-exclusivas : dada uma série de checkboxes, qualquer uma delas pode ser selecionada ; –Exclusivas : em uma série de checkboxes, apenas uma delas pode ser selecionada (radio- buttons).

52 AWT - Check Boxes Uma check box pode ser criada de uma das seguintes maneiras : –Checkbox() : cria uma checkbox, não selecionada ; –Checkbox(String) : cria uma checkbox não selecionada com um texto especificado por String ; –Checkbox(String, null, boolean) : cria uma checkbox que é selecionada ou não de acordo com o valor booleano passado.

53 AWT - Check Boxes Exemplo : adicionando check boxes : Checkbox cb1, cb2, cb3; void init() { add(cb1 = new Checkbox(Bold)); add(cb2 = new Checkbox(Italic)); add(cb3 = new Checkbox(Underline)); }

54 AWT - Check Boxes Métodos de check boxes : –getLabel() : retorna a String associada ao label da check box ; –setLabel() : Troca o texto do label da check box; –getState() : Retorna true ou false de acordo com o estado da check box ; –setState(boolean) : muda o estado da check box.

55 AWT - Radio Buttons Radio buttons tem a mesma aparência que check boxes, porém apenas um deles pode ser selecionado de cada vez; Para adicionarmos um radio button precisamos primeiro criar um grupo para os radio buttons.

56 AWT - Radio Buttons Tal grupo é criado num CheckboxGroup ; A declaração é feita utilizando-se o construtor da classe, que não recebe nenhum parâmetro : CheckboxGroup cbg = new CheckboxGroup();

57 AWT - Radio Buttons Para criarmos um grupo de radio buttons, procederíamos da seguinte maneira : public void init() { CheckboxGroup cbg = new CheckboxGroup(); add(new Checkbox(Caro, cbg, false)); add(new Checkbox(Aceitável, cbg, false)); add(new Checkbox(Barato, cbg, false)); }

58 AWT - Radio Buttons Todos os método de check box são válidos para radio buttons ; Na verdade, radio buttons são um tipo de check buttons (os exclusivos).

59 AWT - Radio Buttons Conhecendo o grupo, podemos verificar o estado dos componentes em busca de qual está marcado; Outra opção é comparar as referências de instância com a retornada por getCurrent, um método de CheckboxGroup.

60 AWT - Menus de Escolha Menus de escolha são menus pull-down que fornecem uma lista da qual o usuário é permitido escolher um valor ; A funcionalidade é a mesma, mas entre diferentes plataformas a aparência pode mudar.

61 AWT - Menus de Escolha Para criarmos um menu de escolha, criamos uma instância de Choice ; Para adicionarmos opções ao menu utilizamos o método addItem(String), que adiciona o texto indicado por String ao menu ; Feito isto adicionamos o menu ao panel.

62 AWT - Menus de Escolha Exemplo : public init() { Choice c = new Choice(); c.addItem(Maçã); c.addItem(Pêra); c.addItem(Mamão); add(c); }

63 AWT - Menus de Escolha Mesmo após termos adicionado o menu ao painel, ainda podemos continuar adicionando Strings a ele.

64 AWT - Menus de Escolha Método importantes : –getItem(int) : retorna a String do ítem indicado em int ; –countItems() : retorna o número de itens no menu ; –getSelectedIndex() : retorna o índice do ítem selecionado ; –getSelectedItem(): retorna a string selecionada; –select(int) : seleciona o ítem indicado por int ; –select(String) : seleciona o ítem que possui String.

65 AWT - Text Fields Todos os componentes vistos até agora permitem ações ou seleção de opções sobre eles; Text Fields permitem entrada de dados neles; São áreas nas quais é possível editar texto, ao contrário de labels, que apenas exibem textos.

66 AWT - Text Fields Para criarmos um text field, utilizamos um dos seguintes construtores : –TextField () : cria um TextField que tem 0 caracters de largura(vai ser redimensionado para o tamanho do manager) ; –TextField(int) : cria um text field vazio com int caracteres mínimo para mostrar caracteres;

67 AWT - Text Fields –TextField(String) : cria um text field que é preenchido com String. A largura é dimensionada pelo manager ; –TextField(String, int) : cria um text field que é preenchido com String e que pode exibir o número indicado por int de caracteres.

68 AWT - Text Fields Por exemplo, as seguintes linhas criam um text field com 30 caracteres de largura com a String Entre seu nome : TextField tf = new TextField(Entre seu nome, 30) ;

69 AWT - Text Fields Métodos importantes : –getText() : retorna o texto contido no text field ; –setText(String) : Coloca a String no text field ; –getColumns() : retorna a largura do text field ; –select(int, int) : seleciona o texto entre as posições passadas nos inteiros (a partir de 0) ; –selectAll() : seleciona o texto no text field ; –isEditable() : retorna true ou false se o campo for editável ou não ;

70 AWT - Text Fields –setEditable(boolean) : seta o texto para ser editado (true, valor default) ou não (false) ; –getEchoChar() : retorna o caracter usado para mascarar entrada ; –setEchoCharacter() : seta o caracter usado para mascarar a entrada (estilo senha) ; –echoCharIsSet() : retorna true ou false se há um caracter de máscara selecionado.

71 AWT - Text Fields Ao editarmos o texto contido no TextField são gerados dois eventos: –Um para o indicar a tecla pressionada; –Um segundo para indicar que a tecla foi liberada.

72 AWT Eventos com Componentes Apesar de ser possível no exercício anterior até editar um texto no text edit ou selecionar o check box, a aplicação não possui nenhuma funcionalidade ; Ao pressionarmos o botão, não ocorre nenhuma ação aparente no programa ; Porém há um evento AWT associado ao pressionamento do botão.

73 AWT Eventos com Componentes Para realizarmos alguma ação ao pressionarmos o botão, precisamos tratar o evento ; Eventos ocorrem quando um componente é ativado (pressionado, selecionado, texto é digitado, etc).

74 AWT Eventos com Componentes A noção de tratamento de eventos é similar a empregada em outros ambientes gráficos, como Windows 95 ; Uma nota importante no tratamento de eventos é que estes trabalham de maneira semelhante a interrupções.

75 AWT Eventos com Componentes Ao invés do programa monitorar o pressionamento de um botão ou um caracter ser digitado num text field, o evento avisa o programa ; Isso muda o estilo de programação, pois ao invés do programa esperar por uma entrada de dados, ele fica ocioso até que a entrada seja disponibilizada para ele.

76 AWT Eventos com Componentes Todos os componentes de interface (a exceção de labels, que não geram eventos) tem diferentes tipos de ações;; Botões, por exemplo, geram ações quando são pressionados.

77 AWT Eventos com Componentes Check boxes, sejam exclusivas ou não exclusivas, geram ações quando seu estado é modificado; Menus de escolha geram uma ação quando um elemento é selecionado.

78 AWT Eventos com Componentes Text fields geram uma ação quando é pressionada alguma tecla dentro deles ; Note que se num text field o usuário pressionar a tecla TAB para mudar de componente (ou fazê-lo utilizando o mouse) não é gerado nenhum evento.

79 Eventos AWT Para o JDK1.0.2, o tratamento de eventos era feito baseado no método handleEvent (eventos simples) e action (eventos em componentes); O eventos eram processados apenas em instâncias do tipo Component; JDK1.1.X trabalha com listeners.

80 Eventos AWT Para cada tipo de componente/elemento há um tipo de listener associado; Para que um applet possa receber eventos de um certo tipo, é necessário: –1: possuir um listener instalado no applet; –2: o componente ou elemento deve ter indicado nele QUEM é o listener das ações sobre ele, no caso, o applet.

81 Eventos AWT Ao contrário de JAVA 1.0.2, podemos definir elementos de uma classe qualquer para gerenciar os eventos; Também podemos, como em JAVA1.0.2, definir elementos derivados de Component ou de outros componentes (como botão e outros), obtendo funcionalidades próprias.

82 Eventos AWT Para que uma classe possa escutar eventos, ela deve implementar um listener; um listener em java é disponibilizado em uma interface; Veremos mais tarde como funcionam interfaces, basta por enquanto saber que estes disponibilizam atributos e métodos para adicionar funcionalidades em uma classe.

83 Eventos AWT Para que uma classe implemente uma interface, utilizamos a palavra reservada implements; Esta palavra é um modificador da classe; Para implementarmos uma classe que implemente ActionListener, a declaramos: class Aplicacao extends Applet implements Action Listener

84 Eventos AWT Tipos de listener (e quais tipos tratam): –ActionListener: Button, List, MenuItem e TextField; –ItemListener: Checkbox, CheckboxMenuItem e Choice; –WindowListener: Dialog e Frame; –ComponentListener: Dialog e Frame; –AdjustmentListner: Scrollbar;

85 Eventos AWT –MouseMotionListener: mov. do mouse e drag; –MouseListener: pressionar botões; –KeyListner: Component; –FocusListner: Component; –ContainerListener; –TextListener. Os listeners estão no pacote java.awt.event;

86 ActionListener Este listener é invocado quando ocorerm eventos em instâncias de Button (pressionamento), List (seleção de um ítem) e MenuItem; O método invocado quando é executada uma ação é actionPerformed, que recebe uma instância de Actionvent.

87 ActionListener Para tratarmos de eventos capturados por um ActionListener, devemos: –1: a classe deve impelmentar ActionListener; –2: o componente deve ter seu listener mudado para a classe em questão; –3: o método actionPerformed deve ser implementado e possuir código para tratar do evento.

88 ActionListener Por questões de elegância, o melhor é que o código do actionPerformed apenas capture o evento e faça um tratamento para descobrir QUAL é o evento; O tratamento do evento em si deve ser feito em um método à parte, para evitar a geração de código confuso e difícil de tratar mais tarde.

89 ActionListener Exemplo de classe: public class App extends Applet implements ActionListener { Button b1; void init() { add(b1=new Button(OK)); b1.addActionListener(this); } public void actionPerformed(ActionEvent evt) { if( (Button)evt.getSource() == b1) { // Processa o evento } }

90 ItemListener Este listener serve trata dos seguintes tipos de eventos: –Mudança de estado em um Checkbox; –Mudança de estado em um Choice; –Mudança de estado em um ítem de menu do estilo check.

91 ItemListener Para tratarmos de eventos capturados por ItemListener, devemos: –1: a classe deve implementar ItemListener; –2: o componente deve ter seu listener mudado para a classe em questão; –3: o método itemStateChanged deve ser implementado e possuir código para tratar do evento.

92 ItemListener O método itemStateChanged recebe ao ser invocado uma instância de ItemEvent; Este objeto contém informações importantes do evento, como a font que o gerou além do tipo do evento; Para recuperar-se a fonte, utiliza-se o método getSource.

93 ItemListener Para determinarmos o tipo do evento (importante em alguns casos), utilziamos o método getID; Os valores retornados possíveis são: –ItemEvent.SELECTED: o elemento foi selecionado; –ItemEvent.DESELECTED: o elemento foi desmarcado.

94 ItemListener Exemplo de classe: public class App extends Applet implements ItemListener { Checkbox c1; void init() { add(c1=new Checkbox(Opção)); c1.addItemListener(this); } public void itemStateChanged(ItemEvent evt) { if( (Checkbox)evt.getSource() == c1) { // Processa o evento } }

95 Operador instanceof O evento gerado pode ser sobre diversos componentes, de diversos tipos; Uma maneira para organizar o processo consiste em verificar a qual classe a fonte do evento pertence; Isto pode, além de organizar, acelerar o processo, separando os componentes em grupos.

96 Operador instanceof Este operador é o instanceof, e sua sintaxe é a seguinte: instanceof O resultado da operação é true se instância for uma instância de Classe.

97 Operador instanceof Por exemplo: if( fonte instanceof Button) {... } Irá entrar na condicional se fonte for uma instância de Button.

98 KeyListener Destinado a tratar de eventos relacionados a teclado; Se aplica sobre instâncias de Component; Há três tipos de eventos possíveis: –Pressionamento de uma tecla; –Liberação de uma tecla; –Digitar uma tecla (pressionar seguido de liberar).

99 KeyListener Para cada um destes tipos de evento, há um método associado: –keyTyped; –keyPressed; –keyReleased.

100 KeyListener Todos os métodos recebem como argumento uma instância de KeyEvent; Alguns métodos importantes: –getKeyChar: retorna o código ASCII da tecla pressionada; –getKeyCode: retorna o código virtual da tecla pressionada; –getKeyText: retorna um texto associado à tecla pressionada.

101 KeyListener E herdados da classe InputEvent: –isAltDown: retorna true ou false dependendo da tecla ALT estar pressionada ou não; –isCtrlDown: para CONTROL, similar ao acima; –isShifDown: ídem para SHIFT.

102 KeyListener Exemplo de classe: public class App extends Applet implements KeyListener { TextArea t1; void init() { add(t1=new TextArea()); t1.addKeyListener(this); } public void keyPressed(KeyEvent evt) { if( (TextArea)evt.getSource() == t1) { // Processa o evento } }

103 KeyListener Caso seja implementado apenas um dos métodos definidos pela interface, é necessário implementar os outros também; É uma obrigação, para que a classe seja possível de ser compilada (não há código associado na interface); O código pode ser vazio, mas há a necessidade de sua criação.

104 AWT - Panels e Layouts Panels (applets são panels) podem conter componentes de interface ou outros panels ; A pergunta é : como organizar esses elementos? Apenas adicioná-los na tela pode ser suficiente em termos de funcionalidade, mas em termos de aparência não.

105 AWT - Panels e Layouts Normalmente, em sistemas orientados a janelas, elementos são organizados utilizando-se coordenadas absolutas em pixels ; Uma interface AWT pode ser exibida numa variedade muito grande de sistemas, com diferentes tipos de fontes de sistema e métricas.

106 AWT - Panels e Layouts Dessa maneira, JAVA não trabalha preferencialmente com referências absolutas a coordenadas de tela ; JAVA possui layout managers que permitem que componentes sejam distribuídos na tela sem necessidade de coordenadas absolutas.

107 AWT - Layout Manager A aparência de como os componentes AWT são exibidos na tela depende de dois fatores: –Como os componentes são adicionados ao painel que os possui (ordem dos add); –O layout manager que controla a disposição dos componentes que são adicionados. O manager determina como porções da tela serão selecionadas e como os componentes serão adicionados.

108 AWT - Layout Manager Cada panel na tela pode ter seu próprio layout manager; Se aninharmos panels um dentro do outro e utilizarmos os devidos layout managers em cada um deles, obtemos uma interface independente de plataforma que irá ter uma aparência semelhante onde quer que o applet rode.

109 AWT - Layout Manager AWT possui cinco tipos de layout manager: –FlowLayout; –GridLayout; –BorderLayout; –CardLayout; –GridBagLayout.

110 AWT - Layout Manager Para criar um layout manager para um panel, basta criar uma instância do layout manager e utilizar o método setLayout para o panel: Ex : public void init { setLayout(new FlowLayout()); }

111 AWT - Layout Manager Como a criação de componentes de interface (instanciação) e inserção no panel são preferíveis de serem feitas no método init do applet, a definição de um layout segue a mesma regra; Para que os componentes sigam o layout, temos que primeiro criar o layout e depois inserir os componentes.

112 AWT Layout Manager - FlowLayout FlowLayout é o layout mais simples em JAVA (default) ; Usando flow layout os componentes são inseridos um ao lado do outro, da esquerda para a direita, linha a linha ; Caso não seja possível inserir um componente na mesma linha, o layout troca para a próxima linha.

113 AWT Layout Manager - FlowLayout Um layout pode ter um alinhamento, que pode ser : –FlowLayout.CENTER : valor default, os componentes são inseridos centralizados ; –FlowLayout.LEFT : os componentes são inseridos alinhados à esquerda ; –FlowLayout.RIGHT : os componentes são inseridos alinhados à direita.

114 AWT Layout Manager - FlowLayout Também podemos especificar um espaçamento (gap) vertical e horizontal entre os componentes ; Esse espaçamento será utilizado para separar um elemento do outro, e é dado em pixels ; O valor de espaçamento é de 3 pixels.

115 AWT Layout Manager - FlowLayout Em FlowLayout, cada componente tem seu tamanho definido por si só (tamanho do texto do botão, número de caracteres do Textedit, etc).

116 AWT Layout Manager - FlowLayout Há três contrutores : –FlowLayout() : cria um flow layout centralizado e com gap de três pixels ; –FlowLayout(int alinha) : cria um flow layout com o alinhamento especificado. –FlowLayout(int alinha, int hor, int ver) : cria um flow layout com o alinhamento especificado em alinha, e gap horizontal e vertical especificado por hor e vert, respectivamente.

117 AWT Layout Manager - GridLayout Grid layouts oferecem maior controle no posicionamento de componentes no panel; Ele trabalha numa matriz (grid), onde os componentes são inseridos; Cada componente adicionado é inserido numa célula, começando pela célula acima mais a esquerda, indo para a direita e trocando de linha quando necessário.

118 AWT Layout Manager - GridLayout Esse tipo de layout apesar de ser mais poderoso em termos de onde os componentes são posicionados, tem a desvantagem de que o componente preenche TODA a área da célula reservada a ele no grid.

119 AWT Layout Manager - GridLayout O grid ocupa toda a área do applet ; Também podemos definir um gap entre cada componente num grid layout.

120 AWT Layout Manager - GridLayout Contrutores : –GridLayout(int lin, int col) : cria um grid layout com lin linhas e col colunas. –GridLayout(int lin, int col, int hgap, int vgap) : cria um grid layout don lin linhas e col colunas, tendo um gap horizontal hgap e vertical hgap.

121 AWT Layout Manager - BorderLayout Border layouts diferem muito de flow layouts e grid layouts, porque ao invés de inserirmos componentes numa ordem, os inserimos com uma direção geográfica.

122 AWT Layout Manager - BorderLayout Tais direções podem ser : –South (para baixo); –West (a esquerda); –North (para cima) ; –East (a direita); –Center.

123 AWT Layout Manager - BorderLayout É possível utilizarmos gaps também, mas isto irá reduzir o espaço disponível para outros componentes; Um problema com este tipo de layout manager é que é possível inserir apenas um componente por região geográfica.

124 AWT Layout Manager - BorderLayout Para utilizarmos o layout, primeiro o selecionamos e inserimos elementos (add) utilizando as coordenadas. Ex : public void init() { setLayout(new BorderLayout()); add(North, new Button(Um)); add(East, new Button(Dois)); add(South, new Button(Três));.... }

125 AWT Layout Manager - CardLayout Card layouts se comportam de maneira BEM diferente dos outros layouts ; Num layout, todos os componentes são visíveis simultaneamente ; Num card layout apenas um dos componentes é visível de cada vez.

126 AWT Layout Manager - CardLayout Card layouts são como tab controls na API Win 32; Para navegar entre cada card, há métodos para avançar para o próximo, anterior, primeiro e último; É interessante adicionar-se panels dentro do card ao invés de um componente simples, de maneira que cada card tenha sua aparência.

127 AWT Layout Manager - CardLayout Quando criamos um card layout, damos um nome para cada card; Podemos selecionar um card para ser exibido utilizando o seu nome; Uma utilidade para cards são programas de instalação (estilo Install Shield).

128 AWT Layout Manager - CardLayout setLayout(new CardLayout()); // adiciona os cards Panel um = new Panel(); add(primeiro, um); Panel dois = new Panel(); add(segundo, dois); Panel tres = new Panel(); add(terceiro, tres); // mostra os panels show(this, segundo); show(this, terceiro); previous(this, first); first(this);

129 AWT Aninhando Panels e Componentes Apenas adicionar componentes num applet é suficiente para aplicações simples; Porém em aplicações complexas, o uso de um simples layout não é suficiente ; Nesses casos, precisamos aninhar um panel dentro de um layout.

130 AWT Aninhando Panels e Componentes Dessa maneira, obtemos as seguintes características : –Applets com layouts complexos, visto que cada um dos panels possui seu próprio layout; –Cada panel pode ter sua própria cor de fundo; –Cada panel pode processar seus eventos ou repassá-los para um nível superior.

131 AWT Aninhando Panels e Componentes Para criarmos um panel dentro de um applet, o código abaixo seria suficiente (apesar de não ter muita funcionalidade por enquanto) : setLayout(new GridLayout(1, 2, 10, 10); Panel panel1 = new Panel(); Panel panel2 = new Panel(); add(panel1); add(panel2);

132 AWT Aninhando Panels e Componentes Lembrando, os eventos são tratados por listeners; Destas maneira, não importa em qual panel e em qual ordem hierárquica esteja o componente, o listener irá tratar do evento; Isto difere de JAVA1.0.2, aonde apenas panels poderiam tratar os eventos, e estes eram repassados na hierarquia.

133 AWT Aninhando Panels e Componentes Para organizar os panels, é interessante extender a classe panel e criar uma classe especializada para cada um dos panels a serem aninhados ; Não é necessário obrigatoriamente, mas caso seja necessário um método paint específico para o panel, precisamos então criar a classe extendida e sobrescrever o método paint default.

134 AWT Aninhando Panels e Componentes Um panel aninhado não tem método init, e muito menos este é chamado, as inicializações devem ser feitas no construtor.

135 AWT Layout Manager - GridBagLayout É o layout manager mais poderoso; Ao mesmo tempo é o mais complexo de ser utilizado; Seu funcionamento lembra o de grid layout; Porém é possível controlar o tamanho do componente na célula, espaçamento, proporção entre linhas e colunas e o arranjo do componente nas células.

136 AWT Layout Manager - GridBagLayout Para criarmos um grid bag layout, utilizamos duas classes : –GridBagLayout, que é o layout manager em si; –GridBagConstraints, que definem as propriedades de cada componente no grid, como alinhamento, dimensões, etc. O relacionamento entre o grid bag, as restrições e os componentes definem o layout.

137 Exemplo - Projetando o Grid Projetar o grid ; Crie o método : void montaRestricoes(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy, int fill) { gbc.gridx = gx ; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; gbc.fill = fill; }

138 Exemplo - Projetando o Grid Crie no método init : GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); setLayout(gbl);

139 Exemplo - Projetando o Grid Os valores possíveis para fill são os seguintes : –HORIZONTAL : o componente deve preencher o grid na horizontal na sua totalidade, a altura é a mínima do componente (interessante para nosso text field); –VERTICAL : o componente preenche na totalidade a altura do grid. A largura é a mínima do componente ; –BOTH : o componente preenche o grid por completo em ambas as direções ; –NONE : o componente possuírá seu tamanho mínimo.

140 Exemplo - Projetando o Grid No método monta restrições : –O primeiro parâmetro é uma referência a gridBagConstraints ; –Os dois parâmetros seguintes indicam QUAL posição no grid o elemento ocupa ; –O quarto e quinto indicam quantas células ele ocupa na vertical e horizontal ; –Os dois parâmetros seguintes dizem a proporção do uso do espaço alocado.

141 Exemplo - Projetando o Grid –Por fim, o último parâmetro, fill, indica o preenchimento do componente na célula;

142 Exemplo - Projetando o Grid Crie as restrições para cada um dos componentes e adicione-os ; Mais tarde veremos como ajustar as proporções;

143 Exemplo - Projetando o Grid Componentes que fazem parte: –Label: Usuário ; –TextField; –checkbox: Visível a outros usuários; –Button: Ok.

144 Exemplo - Projetando o Grid Posicionamento (todos uma célula na vertical): –Label : (0,0), ocupa 1 célula ; –TextEdit : (1,0), ocupa 1 célula ; –CheckBox: (0,1), ocupa 2 células na horizontal –Botão : (0,2), ocupa 2 células. na horizontal Exemplo: montaRestricoes(gbc, 0, 0, 1, 1, 100, 100, GridBagConstraints.BOTH) ; gbl.setConstraints(label, gbc); add(label); Execute e verifique o resultado.

145 Código import java.awt.*; import java.applet.*; public class BridBag extends Form1 { Label label; TextField textField; Checkbox checkbox; Button button; public void init() { super.init(); addNotify(); GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); setLayout(gbl);

146 Código label = new Label("Usuário:"); textField = new TextField(); checkbox = new Checkbox("Visível a outros usuários", null, true); button = new Button("Ok"); montaRestricoes(gbc, 0, 0, 1, 1, 100, 100,GridBagConstraints.BOTH); gbl.setConstraints(label, gbc); add(label); montaRestricoes(gbc, 1, 0, 1, 1, 100, 100,GridBagConstraints.BOTH); gbl.setConstraints(textField, gbc); add(textField); montaRestricoes(gbc, 0, 1, 2, 1, 100, 100,GridBagConstraints.BOTH); gbl.setConstraints(checkbox, gbc); add(checkbox); montaRestricoes(gbc, 0, 2, 2, 1, 100, 100,GridBagConstraints.BOTH); gbl.setConstraints(button, gbc); add(button); }

147 Código void montaRestricoes(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy, int fill) { gbc.gridx = gx ; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; gbc.fill = fill; }

148 Exemplo - Projetando o Grid Podemos observar claramente a divisão do grid entre os componentes ; Agora precisamos modificar as proporções do grid para que os componentes sejam distribuídos corretamente ; A idéia da proporção é em relação a soma total da linha/coluna.

149 Exemplo - Projetando o Grid Devemos então distribuir pesos para os componentes ; Ex : –Label : 20,30 ; –Text Field : 80, 30 ; –Checkbox : 100, 20 ; –Button : 100, 30. Execute o programa e observe o resultado.

150 Exemplo - Projetando o Grid Agora, substitua na linhas de criação das restrições o último parâmetro para GridBagConstraints.NONE; Agora os componentes encontram-se com o seu tamanho mínimo; Exeperimente o valor GridBagConstraints.VERTICAL para o TextField.

151 Exemplo - Projetando o Grid Podemos utilizar o campo fill de GridBagConstraints para cada uma das células, obtendo um layout complexo dessa maneira. Podemos também incluir panels nessas células.

152 AWT - Mais Componentes Além dos componentes básicos de interface, temos alguns outros componentes : –Text Areas ; –Scrolling Lists ; –Scrollbars ; –Sliders ; –Canvas.

153 AWT - TextArea TextAreas são conceitualmente iguais a text fieds; Também é possível inserir texto e obter o texto armazenado na text area; A diferença para um text field é que text area trabalha com múltiplas linhas de edição.

154 AWT - TextArea Os construtores são : –TextArea() : cria um text area vazio com tamanho zero, que será redimensionado baseado no layout. –TextArea(String str) : cria um text area com a String str. –TextArea(int lin, int col) : cria um text area vazio com tamanho de lin linhas e col colunas. –TextArea(String, int lin, int col) : cria um text area com a String str que tem o tamanho de lin linhas e col colunas.

155 AWT - TextArea Os métodos específicos (além dos de text field) são: –getColumns() : retorna um valor inteiro que contém o número de colunas da text area ; –getRows() : retorna um valor inteiro que contém o número de linhas da text area ; –insertText(String str, int pos) : insere a String str na posição indicada por pos (valores iniciando em 0).

156 AWT - TextArea –replaceText(String str, int pos1, int pos2) : Substitui o texto entre as posições pos1 e pos2 pelo texto em str. –appendText(String str) : concatena a String str depois da última posição de caracter na text area.

157 AWT - TextArea Eventos: –KeyListner; –FocusListner.

158 AWT - List Choice menus permite seleciona elementos de uma lista ; Lists são semelhantes a choice menus, diferindo por dois pontos : –Não são menus pop-up. É uma lista da qual podemos escolher um ou mais itens. Se o número de intens é maior que a lista comporta, uma barra de rolagem automaticmante é disponibilizada ; –Podemos selecionar um ou mais elementos na lista, ao passo que choice menus escolhemos apenas um.

159 AWT - List Ações sobre uma list ocorrem quando clicamos duas vezes com o mouse sobre um elemento ; Há eventos associados ao marcarmos ou desmarcarmos um elemento, porém são tratados de uma maneira um pouco diferente das ações vistas anteriormente. O evento é do tipo (id) LIST_SELECTED e LIST_DESELECT.

160 AWT - List Métodos construtores : –List() : cria uma lista vazia, que permite selecionar apenas um elemento de cada vez. –List(int num, boolean mult) : cria uma lista vazia que permite ver simultâneamente na lista num elementos (não há limite quanto ao número de elementos a serem adicionados). O argumento mult indica se a lista permite múltipla seleção (true) ou não (false).

161 AWT - List Métodos : –getItem(int num) : retorna a String associada a posição num da lista ; –countItems() : retorna o número de itens na lista ; –getSelectedIndex() : retorna o índice do elemento selecionado (para listas sem seleção múltipla) ;

162 AWT - List –getSelectedIndexes() : retorna uma matriz dos elementos selecionados (apenas para listas com seleção múltipla) ; –getSelectedItem() : retorna a String do ítem selecionado (seleção única) ; –getSelectedItems() : retorna uma matriz de Strings dos itens selecionados (seleção múltipla) ; –select(int num) : seleciona o ítem indicado por num ; –select(String str) : seleciona o ítem com a String str.

163 AWT - List Eventos: –ItemListner.

164 AWT - Scrollbar Text areas e lists vem com scrollbars associadas ; Também podemos criar scrollbars para manipular intervalos de valores ; Scrolbars são utilizadas para selecionar valores entre um máximo e um mínimo.

165 AWT - Scrollbar Os construtores são : –Scrollbar() : cria uma scrollbar com valores máximo e mínimo 0, na vertical. –Scrollbar(int or) : cria uma scrollbar com valores máximos e mínimo 0, porém com a orientação especificada por or. Essa orientação pode ser Scrollbar.VERTICAL ou Scrollbar.HORIZONTAL.

166 AWT - Scrollbar –Scrollbar(int or, int init, int esp, int max, int min) : cria uma scrollbar, seguindo : A orientação especificada por or ; O valor inicial da indicação, dado por init (o valor deve estar entre os valores máximos e mínimos) ; A espessura da caixa de exibição da scrollbar. Quanto maior a caixa, maior a faixa exibida ; Os valores máximo e mínimo inidicados por max e min respectivamente.

167 AWT - Scrollbar Métodos : –getMaximum() : retorna o valor máximo da scrollbar ; –getMinimum() : retorna o valor mínimo da scrollbar ; –getOrientation() : retorna a orientação da scrollbar ; –getValue() : retorna o valor atual da scrollbar.

168 AWT - Scrollbar –setValue(int i) : muda o valor da scrollbar para o valor indicado por i ; –setLineIncrement(int inc) : seta o valor do incremento quando clicamos com o mouse sobre as setas da scrollbar para inc ; –getLineIncrement() : retorna o valor do incremento quando clicamos nas setas.

169 AWT - Scrollbar –setPageIncrement(int inc) : muda o valor do incremento no valor da scrollbar quando clicamos no corpo desta ; –getPageIncrement() : retorna o valor do incremento de quando clicamos no corpo da scrollbar.

170 AWT - Scrollbar Eventos: –AdjustmentListner.

171 AWT - Canvas Quando desenhamos um texto num applet nos exemplos anteriore, o fizemos sobre um panel ; Um panel serve para diversas finalidades, entre elas desenhar sobre ele ; Um canvas é um elemento que serve praticamente APENAS para desenhar sobre eles.

172 AWT - Canvas É um componente sobre o qual temos eventos ; Canvas não podem conter componentes sobre eles; Podemos criar animações nestes ou mostrar imagens ; Se um panel for destinado apenas para desenhos, um canvas é mais apropriado e mais leve em termos de execução.

173 AWT - Canvas Para criarmos um canvas bastaria num método init : Canvas canvas = new Canvas(); add(canvas);


Carregar ppt "Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR -"

Apresentações semelhantes


Anúncios Google