Interfaces Grficas GUIs em Java usando Swing Parte

  • Slides: 78
Download presentation
Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico Prof. Ricardo

Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico Prof. Ricardo Linden Baseado em transparências de Martin Stepp GUI em Java 1

Nossas Interfaces Até Agora Ø Nós usamos javax. swing. JOption. Pane Não é muito

Nossas Interfaces Até Agora Ø Nós usamos javax. swing. JOption. Pane Não é muito OO! Nem muito poderoso. . . GUI em Java 2

Elementos de uma GUI Ø componentes: Elementos desenhados na tela. Exemplos: botão, textbox, label,

Elementos de uma GUI Ø componentes: Elementos desenhados na tela. Exemplos: botão, textbox, label, etc. Ø containers: elementos que servem como agrupadores lógicos para componentes. Exemplo: Panel. Ø Containers de alto nível: cidadãos de primeira classe, que efetivamente ocupam um espaço no desktop. Exemplos: Frame, Dialog. Box. GUI em Java 3

GUI em Java: AWT e Swing Ø Idéia inicial da Sun: criar um conjunto

GUI em Java: AWT e Swing Ø Idéia inicial da Sun: criar um conjunto de classes e métodos que possam ser usados para escrever uma GUI multi-plataforma (Abstract Windowing Toolkit, ou AWT) Ø O problema é que não era poderosa o suficiente, sendo extremamente limitada. Ø Segunda edição (JDK v 1. 2): Swing Ø Uma nova biblioteca, construída do zero que permite gráficos e GUIs muito mais poderosos e flexíveis. Ø O problema é que, por compatibilidade retroativa, ambos existem no Java e, às vezes, nós usamos os dois. . . GUI em Java 4

Swing Porque o nome “swing”? à Apelido usado pelos desenvolvedores das Java Foundations Classes

Swing Porque o nome “swing”? à Apelido usado pelos desenvolvedores das Java Foundations Classes (JFC) usadas para o desenvolvimento do GUI à Vem do ícone que era usado em uma release iniciail. Porque swing e não awt? à awt é a versão mais velha e mais primitiva. à Swing é mais poderosa à Swing pode ser enviado com as aplicações, sendo não dependente de máquina GUI em Java 5

Look and Feel Ø Cada figuta abaixo mostra o mesmo programa com um look

Look and Feel Ø Cada figuta abaixo mostra o mesmo programa com um look and feel diferente. Ø Conforme mudamos de SO ou de ambiente, o look and feel se adapta para aquele que é padrão na máquina onde rodamos. Ø Isto é uma obrigação da JVM, não do programador. GUI em Java 6

Componentes Swing Ø O Swing fornece vários componentes padrão de GUI que podem ser

Componentes Swing Ø O Swing fornece vários componentes padrão de GUI que podem ser combinados de forma a criar sua interface. Ø Alguns exemplos: Botões, Listas, Menus, Áreas de texto, etc. Ø Swing também fornece containers tais como janelas e barras de ferramentas. Ø Pode ser de vários níveis: Nível mais alto: frames, diálogos Nível Intermediário: panel, scroll pane, tabbed pane, . . . GUI em Java 7

Hierarquia de Componentes Swing java. lang. Object +--java. awt. Component +--java. awt. Container +--javax.

Hierarquia de Componentes Swing java. lang. Object +--java. awt. Component +--java. awt. Container +--javax. swing. JComponent | +--javax. swing. JButton | +--javax. swing. JLabel | +--javax. swing. JMenu. Bar | +--javax. swing. JOption. Pane | +--javax. swing. JPanel | +--javax. swing. JText. Field | +--java. awt. Window +--java. awt. Frame +--javax. swing. JFrame GUI em Java 8

Métodos comuns em todos os componentes Swing Ø get/set. Preferred. Size Ø get/set. Location

Métodos comuns em todos os componentes Swing Ø get/set. Preferred. Size Ø get/set. Location Ø get. Length/Width Ø repaint Ø set. Background(Color) Ø set. Font(Font) Ø is. Enabled / set. Enabled(boolean) Ø is. Visible / set. Visible(boolean) GUI em Java 9

Containers Ø Descendentes da classe java. awt. Container Ø Componentes que podem conter outros

Containers Ø Descendentes da classe java. awt. Container Ø Componentes que podem conter outros componentes. Ø Usamos um layout manager para posicionar e definir o tamanho dos componentes contidos neles. Ø Componentes são adicionados a um container usando as várias formas do método add GUI em Java 10

Containers Top-Level Ø Todo programa que usa uma GUI Swing tem pelo menos um

Containers Top-Level Ø Todo programa que usa uma GUI Swing tem pelo menos um container de alto nível (top-level). Ø Um container top-level provê o suporte que os componenetes siwng necessitam para realizar o desenho da tela e o tratamento de eventos. Ø O Swing fornece três containers top-level : JFrame (Janela principal) JDialog (Janela secundária) JApplet (Um applet mostra uma área desenhada dentro de um navegador internet) GUI em Java 11

Containers Top-Level Ø Para aparecer na tela, todo componente GUI deve ser parte de

Containers Top-Level Ø Para aparecer na tela, todo componente GUI deve ser parte de uma hierarquia de contenção, cuja raiz é um container top-level. Ø Todo container top-level tem um content pane que contém todos os componentes visíveis dentro da interface daquele container toplevel. Não adicione o componente diretamente ao container toplevel GUI em Java 12

Content Pane Todo container top-level contém indiretamente um container intermediário denominado content pane Este

Content Pane Todo container top-level contém indiretamente um container intermediário denominado content pane Este content pane contém todos os componentes visíveis n GUI da janela. Os containers são adicionados ao content pane usando um dos vários tipos de métodos add Exemplo: frame = new JFrame(. . . ); label = new JLabel(. . . ); frame. get. Content. Pane(). add(label, Border. Layout. CENTER); GUI em Java 13

JFrame Ø Um frame, implementado como uma instância da classe JFrame, é uma janela

JFrame Ø Um frame, implementado como uma instância da classe JFrame, é uma janela que tem acessórios tais como borda, título e botões para fechar e minimizá-la. Ø Estes acessórios são totalmente dependentes de plataforma. Ø As aplicações com uma GUI tipicamente usam ao menos um frame. GUI em Java 14

JFrame Ø Métodos principais public void set. Title(String title): Coloca um título na barra

JFrame Ø Métodos principais public void set. Title(String title): Coloca um título na barra de título da janela. public void show(): Faz o frame aparecer na tela. public void set. Visible(boolean v): Faz com que o frame se torne visível (v=true) ou não (v=false). public void set. Default. Close. Operation(int op) : Faz a janela realizar uma determinada operação quando fecha. Mais comum: JFrame. EXIT_ON_CLOSE GUI em Java 15

JFrame Ø A programação gráfica está muito ligada à ocorrência de eventos, que devem

JFrame Ø A programação gráfica está muito ligada à ocorrência de eventos, que devem ser tratados Ø Ao contrário de outras linguagens de programação, os containers Java não vêm 100% para lidar com os eventos básicos que ocorrem em uma janela. Ø Um exemplo é o evento de fechamento. Ø Qualquer aplicativo Delphi ou VB sabe fechar sua janela sem problema, mas Java não. Ø Mais à frente nós vamos aprender mais sobre eventos, então vamos nos contentar com o set. Default. Close. Operation por enquanto GUI em Java 16

Primeiro programa GUI em Java import javax. swing. *; public class Hello. World. Swing

Primeiro programa GUI em Java import javax. swing. *; public class Hello. World. Swing { public static void main(String[] args) { JFrame frame = new JFrame("Hello. World. Swing"); final JLabel label = new JLabel("Hello World"); frame. get. Content. Pane(). add(label); frame. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); frame. pack(); frame. set. Visible(true); } } pack() faz com que a janela seja ajustada para o tamanho preferido de todos os seus subcomponentes. GUI em Java 17

Exemplo 2 Faz a mesma coisa, só que criando uma classe nova, definida por

Exemplo 2 Faz a mesma coisa, só que criando uma classe nova, definida por nós. import javax. swing. *; public class Hello. World. Frame extends JFrame { public Hello. World. Frame() { super(“Hello. World. Swing”); final JLabel label = new JLabel("Hello World"); get. Content. Pane(). add(label); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); pack(); set. Visible(true); } public static void main(String[] args) { Hello. World. Frame frame = new Hello. World. Frame(); } } GUI em Java 18

Relacionamentos conceituais Ø Para quem gosta das formalizações, segue o diagrama de relacionamento entre

Relacionamentos conceituais Ø Para quem gosta das formalizações, segue o diagrama de relacionamento entre as classes: GUI em Java 19

JDialog Ø Um diálogo é uma maneira de conseguir com que o usuário realize

JDialog Ø Um diálogo é uma maneira de conseguir com que o usuário realize uma entrada de dados. Ø Existem vários tipos de diálogos - nós já usamos um há muito tempo. . . Ø Todo diálogo é dependente de um frame. Destruir um frame destrói todos os diálogos que são seus dependentes. Quando um frame é minimizado, somem da tela todos os seus diálogos. Eles voltam quando o frame volta par a o seu tamanho normal. Ø Um diálogo pode ser modal. Quando um diálogo modal está visível, todas as entradas para outros componentes estarão bloqueadas. GUI em Java 20

JDialog Ø Para criar diálogos costumizados, use a classe JDialog diretamente. Ø O Swing

JDialog Ø Para criar diálogos costumizados, use a classe JDialog diretamente. Ø O Swing provê vários diálogos padrões: JProgress. Bar, JFile. Chooser, JColor. Chooser, . . . Vamos ver vários destes mais à frente. Ø A classe JOption. Pane pode ser usada para criar diálogos modais simples, que permitem a costumização de ícones, títulos, textos e botões. GUI em Java 21

Usando JOption. Pane Ø JOption. Pane faz com que seja fácil exibir um diálogo

Usando JOption. Pane Ø JOption. Pane faz com que seja fácil exibir um diálogo padrão que leia um valor do usuário ou informe-o de algo. Ø A classe JOption. Pane parecer complexa dado o seu grande número de métodos. Ø Entretanto, a maioria dos uso desta classe são simplesmente chamadas de uma única linha para um dos métodos estáticos show. Xxx. Dialog GUI em Java 22

show. Xxx. Dialog Ø show. Confirm. Dialog Faz uma pergunta confirmatória e espera uma

show. Xxx. Dialog Ø show. Confirm. Dialog Faz uma pergunta confirmatória e espera uma resposta tal como yes/no/cancel. Ø show. Input. Dialog Lê entrada do teclado (velho conhecido) Ø show. Message. Dialog Informa ao usuário que algo aconteceu. Ø show. Option. Dialog Os três anteriores em um só. Todos os diálogos acima são modais. Detalhes sobre seus parâmetros: http: //java. sun. com GUI em Java 23

Usando JOption. Pane: Exemplo Object[] options = {”Sim!", "Não", ”Quem sabe? "}; int n

Usando JOption. Pane: Exemplo Object[] options = {”Sim!", "Não", ”Quem sabe? "}; int n = JOption. Pane. show. Option. Dialog( frame, ”Tem certeza? ” ”Confirmação", JOption. Pane. YES_NO_CANCEL_OPTION, JOption. Pane. QUESTION_MESSAGE, null, options[2]); GUI em Java 24

Container Ø Um container é um objeto que armazena componentes, governando suas posições, tamanhos

Container Ø Um container é um objeto que armazena componentes, governando suas posições, tamanhos e comportamentos quando o usuário altera seu tamanho. Ø Principais métodos: public void add(Component comp) public void add(Component comp, Object O): adiciona um componente usando informações adicionais (veremos mais adiante). public void remove(Component comp) public void set. Layout(Layout. Manager mgr): Usa o layout manager especificado para posicionar os componentes no container. public void validate(): Manda o layout manager reposicionar todos os objetos no container. GUI em Java 25

JComponent Ø JComponent é a classe base para todos os componentes Swing, com exceção

JComponent Ø JComponent é a classe base para todos os componentes Swing, com exceção dos containers top-level. Ø Para usar um componente que herde de JComponent, ele deve ser colocado na hierarquia de conteção cuja raiz seja um container top -level. Ø A classe JComponent provê, entre outros, tratamento de eventos de teclado, look and feel, infra-estrutura para desenho, suporte a bordas, etc. Ø Todos os descendentes de JComponent também são Containers. Exemplo: um JButton pode conter textos, ícones, etc. GUI em Java 26

JComponent Ø Componentes típicos JLabel JButton JText. Field JPanel JTable etc. Ø Vamos ver

JComponent Ø Componentes típicos JLabel JButton JText. Field JPanel JTable etc. Ø Vamos ver alguns deles agora, para podermos desenvolver nossos primeiros programas gráficos. . . GUI em Java 27

JButton Ø Um botão é uma região clicável com a qual o usuário interage

JButton Ø Um botão é uma região clicável com a qual o usuário interage de forma a realizar um comando. Ø Principais métodos: public JButton(String text): Cria um novo botão com o texto dado como parâmetro definido como texto de face. public String get. Text(): Retorna o texto mostrado no botão. public void set. Text(String text): Muda o texto de face do botão. GUI em Java 28

JButton Ø Apesar de termos criado um botão, ele ainda não faz nada. Ø

JButton Ø Apesar de termos criado um botão, ele ainda não faz nada. Ø Clique nele à vontade, mas ele não vai fzer nada Ø Isto ocorre porque nós não associamos nenhum tratador de evento a este botão. Ø Mais à frente veremos como fzer isto. Agora estamos mais preocupados em desenhar as nossas telas. GUI em Java 29

JLabel Ø Um label é um texto a ser mostrado na tela que normalmente

JLabel Ø Um label é um texto a ser mostrado na tela que normalmente oferece informação para o usuário de forma a tornar a interface mais compreensível. Ø Principais métodos: public JLabel(String text): Cria um novo label com o texto dado como parâmetro definido como texto de face. public String get. Text(): Retorna o texto mostrado no label. public void set. Text(String text): Muda o texto de face do label. GUI em Java 30

JText. Field Ø Um textfield é como um label, só que pode ser editado

JText. Field Ø Um textfield é como um label, só que pode ser editado e modificado pelo usuário. Ø Textfields são usados geralmente para entrada de dados pelo usuário. Ø Métodos interessantes: public JText. Field(int columns): Cria um novo textfield com uma largura, em caracteres, dada pelo parâmetro. public String get. Text(): Retorna o texto atualmente armazenado no campo. public void set. Text(String text): Modifica o texto do campo para ser igual à string dada como parâmetro. GUI em Java 31

Problema: Posicionando componentes Ø Como o programador pode especificar onde fica cada componente na

Problema: Posicionando componentes Ø Como o programador pode especificar onde fica cada componente na janela, quão grande ele deve ser e o que ele deve fazer quando a janela muda de tamanho? D Em C++, Delphi e outros: usar posicionamento absoluto. à O programador especifica as coordenadas de cada componente. C Em Java : usamos os gerenciadores de formato (Layout Managers). à São objetos especiais que decidem onde posicionar cada componente baseados em critérios específicos. GUI em Java 32

Bordas Ø Todo JComponent pode ter uma ou mais bordas. Ø A classe usada

Bordas Ø Todo JComponent pode ter uma ou mais bordas. Ø A classe usada para criar bordas padronizadas é a Border. Factory Ø Exemplo de uso: p. set. Border(Border. Factory. create. Line. Border(Color. black)); Ø Podemos criar uma borda composta, combinando uma ou mais bordas, da seguinte maneira: Border. Factory. create. Compound. Border(border 1, border 2); GUI em Java 33

Classe Border. Factory Ø Hierarquia java. lang. Object javax. swing. Border. Factory Ø Servem

Classe Border. Factory Ø Hierarquia java. lang. Object javax. swing. Border. Factory Ø Servem para implementar bordas padronizadas. Ø Use métodos estáticos que retornam elementos da classe Border: àcreate. Bevel. Border àcreate. Etched. Border àcreate. Titled. Border àcreate. Empty. Border àcreate. Line. Border àetc. GUI em Java 34

Tipos de bordas GUI em Java 35

Tipos de bordas GUI em Java 35

Containers de nível intermediário Ø Também conhecidos como panels ou panes Ø Simplificam o

Containers de nível intermediário Ø Também conhecidos como panels ou panes Ø Simplificam o posicionamento de outros componentes, como no caso do JPanel Ø Têm um papel visível e interativo na GUI do programa, como no caso do JScroll. Pane e do JTabbed. Pane. Ø Possuem um gerenciador de layout padrão, que é o Flow. Layout. Ø Este gerenciador pode ser modificado comando: panel. set. Layout(new Border. Layout()); Ø Veremos mais sobre gerenciadores de layout mais à frente. GUI em Java 36

Containers de nível intermediário Ø Por default, os panels não pintam nada, exceto o

Containers de nível intermediário Ø Por default, os panels não pintam nada, exceto o seu fundo (background). Ø Por default, eles são opacos. Ø Um panel opaco pode ser definido como o content pane de um container de top-level. Ø Panels opacos não desenham um background. GUI em Java 37

JPanel Ø Um panel é um container que podemos usar (além do JFrame) Ø

JPanel Ø Um panel é um container que podemos usar (além do JFrame) Ø Principais métodos: public JPanel(): Cria um JPanel com o layour manager padrão public JPanel(Layout. Manager mgr): Cria um Jpanel com o layour manager especificado. Ø Um JPanel pode depois ser acrescentado em um Jframe para melhorar o layout de nossas telas. GUI em Java 38

Gerenciamento de Layout Ø Gerenciamento de layout consiste no processo de determinar o tamanho

Gerenciamento de Layout Ø Gerenciamento de layout consiste no processo de determinar o tamanho e a posição dos componentes. Ø Ele pode ser feito usando-se posicionamento absoluto, como fazíamos no VC++, Delphi e VB. Neste caso o tamanho e a posição de cada componente deve ser especificado. Não ajusta bem quando o container top-level muda de tamanho. Tem um ajuste complexo quando mudamos de sistema e enfrentamos outras resoluções, tamanhos de fonte, etc. GUI em Java 39

Gerenciamento de Layout Ø O gerencimaneto de layout é geralmente realizado pelos layout managers

Gerenciamento de Layout Ø O gerencimaneto de layout é geralmente realizado pelos layout managers Ø Os componentes oferecem dicas de tamanho e posicionamento para os layout managers, mas são estes que decidem onde e como estes componentes serão posicionados. Ø Estas dicas consistem em tamanho mínimo, preferido e máximo, alinhamento vertical e horizontal. Ø Podemos customizar estas preferências de duas maneiras: Chamando os métodos de definição: : set. Minimum. Size, set. Alignment. X, . . . Subclasseando componentes e modificando os métodos de acesso: get. Minimum. Size, get. Alignment. X, . . . GUI em Java 40

Gerenciamento de Layout Ø A decisão é tomada usando-se designs padronizados. Ø Existem vários

Gerenciamento de Layout Ø A decisão é tomada usando-se designs padronizados. Ø Existem vários tipos de deigns diferentes que podem ser combinados para realizar qualquer tela que desejemos. Ø A plataforma Java fornece quatro layout managers mais usados: Border. Layout, Box. Layout, Flow. Layout, Grid. Layout Ø Quando usarmos o método add para acrescentar um componente em um container, o layout manager em uso deve ser levado em consideração. Ø Chamadas possíveis do add: Usando posição relativa (Border. Layout) panel. add(component, Border. Layout. CENTER); Ordem de adição: (Box. Layout, Grid. Layout, . . . ) panel. add(component); GUI em Java 41

Border. Layout Ø Divide o container em cinco regiões : NORTH, SOUTH, WEST, EAST,

Border. Layout Ø Divide o container em cinco regiões : NORTH, SOUTH, WEST, EAST, CENTER Ø As regiões NORTH e SOUTH se expandem de forma a tomar todas a região horizontalmente e usam o tamanho default verticalmente Ø As regiões WEST e EAST se expandem para preencher a região verticalmente e usam o tamanho default horizontalmente Ø CENTER usa o espaço que não foi ocupado pelos outros. GUI em Java 42

Um exemplo gráfico usando Layout import java. awt. *; import javax. swing. *; public

Um exemplo gráfico usando Layout import java. awt. *; import javax. swing. *; public class Demo. GUI 1 { public static void main(String[] args) { JFrame frame = new JFrame("Hello. Swing"); JPanel panel = new JPanel(); JButton button 1 = new JButton("button 1"); JLabel label 1 = new JLabel("label 1"); JButton button 2 = new JButton("button 2"); JLabel label 2 = new JLabel("label 2"); panel. set. Layout(new Border. Layout()); panel. add(button 1, Border. Layout. NORTH); panel. add(button 2, Border. Layout. SOUTH); panel. add(label 1, Border. Layout. WEST); panel. add(label 2, Border. Layout. EAST); frame. get. Content. Pane(). add(panel); frame. pack(); frame. set. Visible(true); } } GUI em Java 43

Resultado. . . Ø A saída do programa é algo assim: Ø Repare que

Resultado. . . Ø A saída do programa é algo assim: Ø Repare que sempre que modificamos o tamanho da janela, os componentes automaticamente se reposicionam. Ø Problema: quando fechamos o frame, gostaríamos que o programa terminasse, mas isto não acontece (veja a janela de processos em execução dentro do Net. Beans) GUI em Java 44

Resolvendo o problema Ø Ø O problema é que não temos nenhum tratador para

Resolvendo o problema Ø Ø O problema é que não temos nenhum tratador para o evento de fechar a janela. Fechar a janela Fechar o programa. . . Antes usávamos o set. Default. Close. Operation Podemos resolver isto também acrescentando um tratador de eventos: add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e) { System. exit(0); } } ); Ø Depois explicamos melhor. . . Ø Obs: a classe Window. Adapter fica dentro da biblioteca java. awt. event, que deve ser importada para que o programa funcione. GUI em Java 45

Flow. Layout Ø Trata o container como se fosse uma “página” ou um “parágrafo”

Flow. Layout Ø Trata o container como se fosse uma “página” ou um “parágrafo” da esquerda para a direita e de cima para baixo. Ø Os componentes recebem o seu tamanho preferido tanto verticalmente quanto horizontalmente. Ø Os componentes são posicionados na ordem em que foram adicionados Ø Se a linha for muito longa, os componentes passam para a linha de baixo. GUI em Java 46

Grid. Layout Ø Trata o container como um grid de linhas e colunas de

Grid. Layout Ø Trata o container como um grid de linhas e colunas de tamanhos iguais. Ø Os componenets recebem tamanhos iguais não importando qual seu tamanho favorito. GUI em Java 47

Box. Layout Ø Alinha os componentes no container em uma única linha ou coluna

Box. Layout Ø Alinha os componentes no container em uma única linha ou coluna Ø Os componentes usam seu tamanho e alinhamentos favoritos Ø A melhor maneira de criar um container com o layout box: Box. create. Horizontal. Box(); Box. create. Vertical. Box(); GUI em Java 48

Problema dos Layout Managers Como desenharíamos uma janela complicada como a janela abaixo usando

Problema dos Layout Managers Como desenharíamos uma janela complicada como a janela abaixo usando os layout managers que vimos até agora? GUI em Java 49

Solução : Layout composto Ø Crie panels dentro de Panels Ø Cada Panel tem

Solução : Layout composto Ø Crie panels dentro de Panels Ø Cada Panel tem um layout diferente Ø Combinando os layouts, podemos conseguir desenhos mais complexos e poderosos e que atinjam nossos objetivos. Ø Exemplo Quantos panels temos? Qual é o layout de cada um deles? GUI em Java 50

Resposta Container north = new JPanel(new Flow. Layout()); north. add(new JButton("Button 1")); north. add(new

Resposta Container north = new JPanel(new Flow. Layout()); north. add(new JButton("Button 1")); north. add(new JButton("Button 2")); Container south = new JPanel(new Border. Layout()); south. add(new JLabel("Southwest"), Border. Layout. WEST); south. add(new JLabel("Southeast"), Border. Layout. EAST); Container cp = get. Content. Pane(); cp. add(north, Border. Layout. NORTH); cp. add(new JButton("Center Button"), Border. Layout. CENTER); cp. add(south, Border. Layout. SOUTH); GUI em Java 51

Exemplo de Layouts Ø Façam programas em Java que desenhem as seguintes telas: (a)

Exemplo de Layouts Ø Façam programas em Java que desenhem as seguintes telas: (a) (b) (c) (d) (e) GUI em Java 52

JCheck. Box ØObjeto de tela que permite que escolhamos entre duas opções (marcado e

JCheck. Box ØObjeto de tela que permite que escolhamos entre duas opções (marcado e não marcado) ØMétodos interessantes: public JCheck. Box(String text): Cria uma checkbox cujo texto é dado pelo parâmetro e cujo valor default é não marcada public JCheck. Box(String text, boolean is. Checked) Cria uma checkbox cujo texto é dado pelo primeiro parâmetro e cujo valor default é dado pelo segundo parâmetro. public boolean is. Selected(): Retorna true se a check box foi selecionada. public void set. Selected(boolean selected): Muda o estado da checkbox de acordo com o parâmetro passado. GUI em Java 53

JRadio. Button Ø Um botão que pode ser selecionado. Ø Normalmente é parte de

JRadio. Button Ø Um botão que pode ser selecionado. Ø Normalmente é parte de um grupo de botões mutuamente exclusivos (isto é, apenas um pode ser selecionado de cada vez) Ø Métodos interessantes public JRadio. Button(String text) JRadio. Button(String text, Icon icon) boolean is. Selected() void set. Selected(boolean b) GUI em Java 54

Button. Group Ø Um grupo lógico de radiobuttons que garante que apenas um deles

Button. Group Ø Um grupo lógico de radiobuttons que garante que apenas um deles pode ser selecionado de cada vez. Ø Métodos interessantes: public Button. Group() public void add(Abstract. Button b) Ø O objeto da classe Button. Group não é um objeto gráfico, apenas um grupo lógico. Ø Os objetos da classe Radio. Button é que são adicionados ao container GUI em Java 55

Usando Button. Group e Radio. Button GUI em Java 56

Usando Button. Group e Radio. Button GUI em Java 56

Usando Icon Ø Nas classes JButton, JRadio. Button, JCheck. Box, JLabel, etc, temos o

Usando Icon Ø Nas classes JButton, JRadio. Button, JCheck. Box, JLabel, etc, temos o seguinte. O construtor pode receber um ícone public void set. Icon(Icon) public void set. Selected. Icon(Icon) public void set. Rollover. Icon(Icon) GUI em Java 57

JText. Area Ø Uma área de texto multi-linha Ø Útil para escrever textos longos

JText. Area Ø Uma área de texto multi-linha Ø Útil para escrever textos longos que não necessitam formatação. Ø Métodos interessantes: public JText. Area(int rows, int columns): Cria um novo campo de texto com um tamanho determinado em termos de número de linhas e colunas public String get. Text(): Retorna o texto armazenado no momento na área. public void set. Text(String text): Define o texto a ser armazenado na área como sendo o parâmetro passado. GUI em Java 58

JScroll. Pane Ø Uma container especial que permite que usemos barras de rolagem para

JScroll. Pane Ø Uma container especial que permite que usemos barras de rolagem para ver componentes. Ø Na verdade, “envolvemos” um componente com scrollbars. public JScroll. Pane(Component comp) Ø Colocamos o JScrollpane no container, não o componente original. content. Pane. add(new JScroll. Pane(textarea), Border. Layout. CENTER); GUI em Java 59

JFile. Chooser Ø Uma caixa de diálogo que permite que nós selecionemos um ou

JFile. Chooser Ø Uma caixa de diálogo que permite que nós selecionemos um ou mais arquivos e/ou diretórios. Ø Métodos interessantes: public public JFile. Chooser() JFile. Chooser(String current. Dir) int show. Open. Dialog(Component parent) int show. Save. Dialog(Component parent) File get. Selected. File() static int APPROVE_OPTION, CANCEL_OPTION GUI em Java 60

JColor. Chooser Ø Outro palete especial que permite que o usuário escolha uma dentre

JColor. Chooser Ø Outro palete especial que permite que o usuário escolha uma dentre um palete de cores. Ø Métodos interessantes: public JColor. Chooser() public JColor. Chooser(Color initial) public Color show. Dialog(Component parent, String title, Color initial. Color) : permite escolher uma cor do palete, retornando a cor escolhida. GUI em Java 61

JMenu. Item Ø Uma entrada em um menu, que pode ser clicado para disparar

JMenu. Item Ø Uma entrada em um menu, que pode ser clicado para disparar ações. Ø Métodos interessantes: public public JMenu. Item(String text) JMenu. Item(String text, Icon icon) JMenu. Item(String text, int mnemonic) void add. Action. Listener(Action. Listener al) void set. Accelerator(Key. Stroke ks) void set. Enabled(boolean b) void set. Mnemonic(int mnemonic) GUI em Java 62

JCheck. Box. Menu. Item / JRadio. Button. Menu. Item Ø Itens de menu que

JCheck. Box. Menu. Item / JRadio. Button. Menu. Item Ø Itens de menu que se comportam como checkboxes ou radiobuttons. Ø Métodos interessantes: public JXxx. Menu. Item(String text) public JXxx. Menu. Item(String text, boolean select) public JXxx. Menu. Item(String text, Icon icon, boolean selected) public void add. Action. Listener(Action. Listener al) public boolean is. Selected() public void set. Selected(boolean b) Ø Ambas as classes extendem a classe Abstract. Button! GUI em Java 63

JMenu Ø Um menu que é criado para mostrar os itens de menu. Ø

JMenu Ø Um menu que é criado para mostrar os itens de menu. Ø Menus podem conter outros menus. Ø Métodos interessantes: public JMenu(String s) void add(JMenu. Item item) void add. Separator() void set. Mnemonic(int mnemonic) GUI em Java 64

JMenu. Bar Ø O container de nível mais alto que pode armazenar menus. Ø

JMenu. Bar Ø O container de nível mais alto que pode armazenar menus. Ø Podem ser ligados a um frame através do método set. JMenu. Bar. Existente na classe JFrame Ø Métodos Interessantes: public JMenu. Bar() public void add(JMenu menu) GUI em Java 65

Menus - Exemplo Completo import java. awt. *; import javax. swing. *; public class

Menus - Exemplo Completo import java. awt. *; import javax. swing. *; public class Minha. Tela { public static void main(String args[]) { JFrame f=new JFrame("Tela Complexa"); JMenu menu. Arquivo=new JMenu("Arquivo"); JMenu menu. Sobre=new JMenu("Sobre"); JMenu sub. Menu. Salvar=new JMenu("Salvar"); JMenu. Item a 1=new JMenu. Item("Abrir"); JMenu. Item e 1=new JMenu. Item("Sair"); } } JMenu. Item s 1=new JMenu. Item("Salvar"); JMenu. Item s 2=new JMenu. Item("Salvar como"); sub. Menu. Salvar. add(s 1); sub. Menu. Salvar. add(s 2); menu. Arquivo. add(a 1); menu. Arquivo. add(sub. Menu. Salvar); GUI em Java menu. Arquivo. add. Separator(); menu. Arquivo. add(e 1); JMenu. Bar menu. Completo= new JMenu. Bar(); menu. Completo. add(menu. Arquivo); menu. Completo. add(menu. Sobre); f. set. JMenu. Bar(menu. Completo); f. set. Default. Close. Operation( JFrame. EXIT_ON_CLOSE); f. set. Size( new Dimension(400, 400) ); f. set. Visible(true); 66

Resultado do exemplo Ø Todo frame tem apenas um JMenu. Bar Ø Itens de

Resultado do exemplo Ø Todo frame tem apenas um JMenu. Bar Ø Itens de menu podem ser menus GUI em Java 67

Aceleradores Ø Tecla global que realiza ações. Ø Ex: Alt-X termina programas da Microsoft.

Aceleradores Ø Tecla global que realiza ações. Ø Ex: Alt-X termina programas da Microsoft. Ø Funciona mesmo em componentes que são estejam com foco de entrada ou mesmo invisíveis. Ø Podem ser executado em qualquer momento na aplicação. Ø Podem incluir opcionalmente modificadores como Shift e Alt. Ø Exemplo de uso: m. Item. set. Accelerator( Key. Stroke. get. Key. Stroke('T', Key. Event. ALT_MASK) ); GUI em Java 68

Mnemonics e Acelerators Ø Mnemonics são locais. Ø Acelerators são globais. Ø Ex. :

Mnemonics e Acelerators Ø Mnemonics são locais. Ø Acelerators são globais. Ø Ex. : Acrescentado no nosso código anterior as linhas e 1. set. Accelerator(Key. Stroke. get. Key. Stroke('X', Key. Event. ALT_MASK)); menu. Arquivo. set. Mnemonic('A'); a 1. set. Mnemonic('A'); GUI em Java 69

Pintando a tela Ø O processo através do qual um componente se redesenha na

Pintando a tela Ø O processo através do qual um componente se redesenha na tela é chamado de pintura (painting) Ø Painting ocorre nas seguintes ocasiões: Quando o componente é mostrado pela primeira vez. Quando o componente que estava coberto é mostrado. Quando o componente muda de tamanho. Quando o programador o pede, através do comando repaint() GUI em Java 70

Pintando a tela Ø A maior parte do processo é feita automaticamente. Ø Quando

Pintando a tela Ø A maior parte do processo é feita automaticamente. Ø Quando você quer fazer alguma coisa diferente, você deve sobreescrever o método paint. Component Logo, você deve derivar uma nova classe a partir da classe tradicional da GUI. Para garantir uma boa pintura, sempre invoque primeiro o método super. paint. Component Ø Este método recebe um objeto da classe Graphics como parâmetro. Ø Ele é passado automaticamente e representa a sua área de desenho. Ø Use este objeto para realizar seus desenhos especiais. GUI em Java 71

Primeiro Exemplo import java. awt. *; import javax. swing. *; class My. Panel extends

Primeiro Exemplo import java. awt. *; import javax. swing. *; class My. Panel extends JPanel { public void paint. Component (Graphics g) { super. paint. Component(g); g. draw. String("Not Hello World", 5, 25); } Sempre chame o paint. Component } da superclasse primeiro public class Meu. Exemplo { public static void main(String args[]) { JFrame f=new JFrame("Estranho Hello World"); f. get. Content. Pane(). add(new My. Panel()); f. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); f. set. Size( new Dimension(200, 200) ); f. set. Visible(true); } } GUI em Java 72

Segundo Exemplo import java. awt. *; import javax. swing. *; class My. Panel extends

Segundo Exemplo import java. awt. *; import javax. swing. *; class My. Panel extends JPanel { public void paint. Component(Graphics g) { super. paint. Component(g); set. Background(Color. white); g. set. Color(Color. orange); Sempre chame o método paint. Component da g. fill. Rect(20, 50, 100); superclasse primeiro } } GUI em Java 73

Segundo Exemplo (cont) public class Teste. Panel { public static void main(String args[]) {

Segundo Exemplo (cont) public class Teste. Panel { public static void main(String args[]) { JFrame f=new JFrame("Testando"); My. Panel p=new My. Panel(); f. get. Content. Pane(). add(p); f. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); f. set. Size( new Dimension(200, 200) ); f. set. Visible(true); } } GUI em Java 74

Resultado do segundo exemplo GUI em Java 75

Resultado do segundo exemplo GUI em Java 75

Usando Graphics Ø Usando Graphics (e a classe mais poderosa, Graphics 2 D), podemos

Usando Graphics Ø Usando Graphics (e a classe mais poderosa, Graphics 2 D), podemos fazer desenhos tais como: Ø e até produzir efeitos tais como: GUI em Java 76

Usando Graphics Ø Você recebe sempre um objeto da classe Graphics, mas para poder

Usando Graphics Ø Você recebe sempre um objeto da classe Graphics, mas para poder usar todo o poder associado à API gráfica, deve fazer um typecast para transformá-lo em Graphics 2 D Ø O código é public void Paint (Graphics g) { Graphics 2 D g 2 = (Graphics 2 D) g; . . . } GUI em Java 77

Graphics 2 D Ø Para mudar um atributo no contexto de renderização de um

Graphics 2 D Ø Para mudar um atributo no contexto de renderização de um Graphics 2 D, usamos um dos métodos a seguir: · set. Stroke · set. Paint · set. Composite · set. Transform · set. Clip · set. Font · set. Rendering. Hints GUI em Java 78