Programação Gráfica em Java.



Documentos relacionados
Tratamento de Eventos

Sistema de Recursos Humanos

Adding User Interaction

PROGRAMAÇÃO ORIENTADA A OBJETOS -INTERFACES GRÁFICAS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Interfaces Gráficas: Interações Complexas

1 Criando um aplicativo visual em Java

Introdução à Programação. Interfaces Gráficas

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

Arquitetura de Tratamento de Eventos em Programas com GUI - Graphical User Interface

Módulo 7. Interface Gráfica com o Usuário GUI - Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

Eclipse IDE Dá-se importância aos antepassados quando já não temos nenhum. Francois Chateaubriand

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

JAVA. Marcio de Carvalho Victorino. Interface Gráfica em Java (GUI)

DIRETRIZES DE USO DA MATRIZ DE SISTEMATIZAÇÃO DE INFORMAÇÕES

Programação III. Interface Gráfica - Swing. Interface Gráfica Swing Jocélio Passos joceliodpassos@bol.com.br. Interface Gráfica - Swing

Programação Orientada a Objetos

Jogo Da Velha. - Parte 1 - Fazendo a parte gráfica do jogo da Velha

1 UNIT Universidade do Trabalhador Dr. Abel dos Santos Nunes

Persistência de Classes em Tabelas de Banco de Dados

Técnicas de Programação II

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

Windows 7. Questões Informática FUNDATEC

Desenvolvimento de Aplicações Desktop

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Tutorial Módulo Frequência

Apresentando o novo modelo de atendimento Centro Marista de Serviços - CMS. Curitiba, Julho de 2014

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA TREINAMENTO EM INFORMÁTICA MÓDULO V

Google Drive. Passos. Configurando o Google Drive

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Resize Shape Basic Shape FACULDADE DE TECNOLOGIA SENAC PELOTAS

1) De acordo com o trecho de código escrito na linguagem JAVA, responda a questão abaixo:

Microsoft Office PowerPoint 2007

CICLO DE APERFEIÇOAMENTO PROFISSIONAL DOS SERVIDORES MUNICIPAIS DE MARICÁ- RJ EDITOR DE TEXTO - WORD

VERSÃO 1 PRELIMINAR MÓDULO 3 - PRESENCIAL

CAPACITAÇÃO EM LIBREOFFICE IMPRESS

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

Windows Explorer. Prof. Valdir

CURSO DE INFORMÁTICA BÁSICA AULA 2 O AMBIENTE WINDOWS

Logo abaixo temos a Barra de Menus que é onde podemos acessar todos os recursos do PHP Editor.

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

APOSTILA WORD BÁSICO

Is Event Dispatcher Threade (Animation)

Aula 03 PowerPoint 2007

Estilos de Interação

Manual do Atendente. Treinamento OTRS Help Desk

Manual de Utilização ZENDESK. Instruções Básicas

MÓDULO 4 SWING Parte 3

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Curso de Aprendizado Industrial Desenvolvedor WEB

Sumário. 1 Tutorial: Blogs no Clickideia

Manual de Utilização Chat Intercâmbio

Tutorial de Computação Introdução a Programação Gráfica em Java para MEC1100 v

Implementação de Classe e Auto-Relacionamento em Java

Manual de Administração

Swing. Page 1. Swing. Prof. Anderson Augustinho Uniandrade

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Menus Personalizados

Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web

Introdução a Java. Hélder Nunes

NetBeans. Conhecendo um pouco da IDE

Passo a Passo do Checkout no SIGLA Digital

Microsoft Access XP Módulo Um

Manual do Almoxarifado SIGA-ADM

Manual para utilização das ferramentas de edição Intranet e Internet.

CENTRO UNIVERSITÁRIO CATÓLICA DE SANTA CATARINA PRÓ-REITORIA ACADÊMICA NÚCLEO DE EDUCAÇÃO EM AMBIENTES DIGITAIS NEAD

MANUAL DO ALUNO 4LEARN

Manual de Utilização

FAQ Perguntas Frequentes

1Conhecendo o Flash O B J E T I V O S

IMPORTANTE: O sistema Off-line Dr.Micro é compatível com os navegadores Mozilla Firefox e Internet Explorer.

atube Catcher versão 3.8 Manual de instalação do software atube Catcher

Sistema de Gerenciamento Remoto

APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

AULA 14 Plugin TerraEdit

Excel VBA - Parte IV:Inserindo um formulário e seus comandos

ROTINAS PADRÕES DO SISTEMAS

Sistema de Logística Reversa

Capítulo 29. Menus. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Java : Comunicação Cliente-Servidor.

Programação de Computadores - I. Profª Beatriz Profº Israel

HCT Compatibilidade Manual do Usuário

Manual do usuário. v1.0

BACKUP ONLINE PASSOS PARA CONFIGURAÇÃO INICIAL DO PRODUTO

Manual do Usuário Layout Novo CMS WordPress Versão atual: 3.5.1

PÓS-GRADUAÇÃO EM MATEMÁTICA COMPUTACIONAL INFORMÁTICA INSTRUMENTAL Aula 05: Editores de Imagem Paint / GIMP

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Noções de. Microsoft SQL Server. Microsoft SQL Server

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

Manual do Contribuidor. Portal de Internet. Projeto: Novo Portal de internet

2. INSTALAÇÃO E CONFIGURAÇÃO

BANCO DE AULAS E PROJETOS MANUAL DO APLICATIVO

O WINDOWS 98 é um sistema operacional gráfico, multitarefa, produzido pela Microsoft.

Manual Instalação Pedido Eletrônico

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

Transcrição:

Programação Gráfica em Java. Objetivo: Ao final da aula o aluno deverá ser capaz de desenvolver a aplicação gráfica ilustrada ao lado. A interface gráfica será simples, composta por elementos de menus. Deverá também permitir que o usuário utilize o mouse para interagir com a aplicação. Essa interatividade consiste em: Desenhar um retângulo na janela na posição definida pelo clique do mouse. O Menu deverá permitir a troca da cor de fundo da janela e encerrar a aplicação. Sumário. 1. Janela... 2 Como elaborar uma janela em Java?... 2 A execução:... 3 Como centralizar e fechar a janela?... 3 Comentários do exercício.... 5 2. Painel.... 5 Como inserir conteúdo em uma Janela?... 5 3. O listener do Mouse... 6 Introdução:... 6 Outros Métodos do MouseAdapter:... 7 Comentários:... 7 4. Menus... 8 A barra de Menus... 8 Como inserir uma barra de menus em um Frame?... 8 Como definir um menu?... 8 Como definir um ítem de menu?... 8 Como definir um sub-item de menu?... 8 Exemplo de Menus.... 9 Código Java para definição de Menus... 9 Como adicionar ações aos elementos do menu?... 10 Criação de uma classe específica para fazer a função de listener das ações. 10 Como definir código dentro da classe filha de JFrame?... 11 Código alterado.... 11 As alterações necessárias são representadas em negrito.erro! Indicador não definido. Como definir menus Flutantes?... 13 Exemplo de execução:... 13 Código Completo da aplicação:... 13 Desafio:... 15 Prof. Vida (vida@utfpr.edu.br) 1

1. Janela Como elaborar uma janela em Java? A definição de uma janela em Java é feita através da classe JFrame do pacote javax.swing. Tipicamente, cria-se uma classe filha dessa classe e, em seguida, modifica-se os parâmetros dessa janela. Por exemplo, o código abaixo, define uma classe MinhaPrimeiraJanela a partir da classe JFrame. O construtor dessa classe define o seu tamanho para 320 por 240 pixels e o título da janela é definido através da instrução settitle(string) nas linhas 10 e 09 do código abaixo.. ////****** arquivo MinhaPrimeiraJanela.java /*03*/ import java.awt.event.*; /*04*/ import java.awt.*; /*05*/ public class MinhaPrimeiraJanela extends JFrame /*06*/ { /*07*/ public MinhaPrimeiraJanela(String titulo) /*08*/ { /*09*/ settitle(titulo); /*10*/ setsize(320,240); /*11*/ } /*12*/ } Por sua vez, o arquivo abaixo permite executar e testar a classe definida anteriormente. ////***** arquivo testeminhaprimeirajanela.java /*03*/ public class testeminhaprimeirajanela /*04*/ { public static void main(string[] a) /*05*/ { MinhaPrimeiraJanela tela = new /*06*/ MinhaPrimeiraJanela( Minha Janela ); /*07*/ tela.setvisible(true); } } Prof. Vida (vida@utfpr.edu.br) 2

A execução: A Figura 1 ilustra o execução da classe testeminhaprimeirajanela. Como centralizar e fechar a janela? Figura 1-Primeira Janela A posição da janela na tela do computador não foi definida pelo programador. Logo, a posição adotada é a coordenada (0,0), ou seja, no canto superior a esquerda. Outro aspecto a ser observado é que ao clicar no ícone do canto superior a direita da janela na tentativa de fechá-la, a janelaapenas desaparece da tela do computador. A aplicação ainda continua rodando e a janela ainda existe. Como resolver essas as questões de posicionamento e finalização da aplicação? O posicionamento é feito através da instrução setlocation(int, int). A finalização, por sua vez, não pode ser resolvida de maneira tão simples. Finalizar uma aplicação gráfica ou executar qualquer ação ou evento não é função dos objetos gráficos em Java. Há a necessidade de instruções específicas. Para a definição dessas ações, pode-se desenvolver uma classe específica para essa tarefa, por exemplo. Essa classe, tipicamente, será filha da classe WindowAdapter ou MouseAdapter. Essas classes possuem assinaturas de métodos que são executados quando um evento ocorre. Por exemplo, o arquivo MinhaSegundaJanela.java poderia ser definida conforme o código a seguir. O método WindowClosing(WindowEvent e) da classe Eventos definido nas linhas 07 a 08 do código define o que deverá ser feito quando a janela for fechada. Nesse caso, encerrar a aplicação. A instrução addwindowlistener( new Eventos()); adiciona uma instância da classe Eventos ao responsável pela janela. Em Java, essa responsabilidade é definida como listener. A posição da janela é definida pela instrução setlocation(double,double) do método centraliza() definido nas linhas 18 e 19. As coordenadas que permitem centralizar a janela são obtidas nas linhas 14, 15, 16 e 17. O método getsize() das linhas 18 e 19 retornam o tamanho da janela. Prof. Vida (vida@utfpr.edu.br) 3

Código. ////**** arquivo MinhaSegundaJanela.java /*1*/ package interfacegrafica; /*2*/ import javax.swing.*; /*3*/ import java.awt.event.*; /*4*/ import java.awt.*; /*5*/ class Eventos extends WindowAdapter /*6*/ { /*7*/ public void windowclosing(windowevent e) /*8*/ {System.exit(0); } /*9*/ } /*10*/ public class MinhaSegundaJanela extends MinhaPrimeiraJanela /*12*/ { /*13*/ private void centraliza() /*14*/ {int x = ((Toolkit.getDefaultToolkit()). /*15*/ getscreensize()).width; /*16*/ int y = ((Toolkit.getDefaultToolkit()). /*17*/ getscreensize()).height; /*18*/ setlocation((x - getsize().width)/2 /*19*/,(y - getsize().height)/2); /*20*/ } /*21*/ public MinhaSegundaJanela(String titulo) /*22*/ { super(titulo); /*23*/ addwindowlistener( new Eventos()); /*25*/ centraliza(); /*26*/ }} Prof. Vida (vida@utfpr.edu.br) 4

Teste da classe MinhaSegundaJanela. ////***** arquivo testeminhasegundajanela.java /*03*/ public class testeminhasegundajanela /*04*/ { public static void main(string[] a) /*05*/ { MinhaSegundaJanela tela = new /*06*/ MinhaSegundaJanela("Minha Segunda Janela"); /*07*/ tela.setvisible(true); } } 2. Painel. Como inserir conteúdo em uma Janela? Uma janela, conforme definido anteriormente, define apenas uma região. Para a definição de conteúdos dessa janela, há a necessidade da definição de um ou vários painés que irão organizar e armazenar informações. Um painel é definido a partir da classe JPanel. A linha 12 do código abaixo define um painel de nome conteudo. Por motivos de ilustração, o painel tem a sua cor de fundo modificado para cor verde na linha 16. A associação entre o painel e a janela é feita através do objeto container da classe JFrame, linhas 17 e 18. Ao ser executado, a janela agora terá um fundo verde. Esse painel permitirá que adicionemos um pouco mais de interatividade conforme descrito na próxima seção. Código ////**************** arquivo MinhaTerceiraJanela.java /*03*/ import java.awt.event.*; /*04*/ import java.awt.*; Arquivo para teste /*10*/ public class MinhaTerceiraJanela extends MinhaSegundaJanela /*11*/ { /*12*/ JPanel conteudo = new JPanel(); /*13*/ public MinhaTerceiraJanela(String titulo) /*14*/ { /*15*/ super(titulo); /*16*/ conteudo.setbackground(color.green); /*17*/ Container fundo = getcontentpane(); /*18*/ fundo.add(conteudo); /*19*/ } /*20*/ } ////***** arquivo testeminhaterceirajanela.java Prof. Vida (vida@utfpr.edu.br) 5

/*03*/ public class testeminhaterceirajanela /*04*/ { public static void main(string[] a) /*05*/ { MinhaTerceiraJanela tela = new /*06*/ MinhaTerceiraJanela("Minha Terceira Janela"); /*07*/ tela.setvisible(true); } } 3. O listener do Mouse Introdução: De maneira similar ao exemplo de finalização de aplicação anteriormente apresentado, o mouse possui o seu próprio listener. Como exemplo, o código a seguir define uma classe GerenteMouse filha de MouseAdapter. Código alterado. As alterações necessárias são representadas em negrito. ////******* arquivo MinhaQuartaJanela.java /*03*/ import java.awt.event.*; /*04*/ import java.awt.*; /*05*/ class GerenteMouse extends MouseAdapter /*06*/ { /*07*/ int cliquex, cliquey; /*08*/ JPanel j; /*09*/ /*10*/ public GerenteMouse(JPanel janela) /*11*/ {j = janela;} /*12*/ public void mousereleased(mouseevent evt) /*13*/ { /*14*/ if (evt.getbutton()!= MouseEvent.BUTTON1) return; /*15*/ cliquex = evt.getx(); cliquey = evt.gety(); /*16*/ System.out.println(cliqueX+ "," /*17*/ + cliquey); /*18*/ paintcomponent(j.getgraphics()); /*19*/ } /*20*/ public void paintcomponent(graphics g) /*21*/ { g.setcolor(color.blue); /*22*/ g.draw3drect(cliquex, cliquey, 100 /*23*/, 100,true); /*24*/ } /*25*/ } /*26*/ public class MinhaQuartaJanela extends MinhaTerceiraJanela /*27*/ { /*28*/ public MinhaQuartaJanela(String titulo) /*29*/ { /*30*/ super(titulo); /*31*/ super.conteudo.addmouselistener(new /*32*/ GerenteMouse(super.conteudo)); /*33*/ } /*34*/ } Prof. Vida (vida@utfpr.edu.br) 6

Teste da classe MinhaQuartaJanela ////***** arquivo testeminhaquartajanela.java /*03*/ public class testeminhaquartajanela /*04*/ { public static void main(string[] a) /*05*/ { MinhaQuartaJanela tela = new /*06*/ MinhaQuartaJanela("Minha Quarta Janela"); /*07*/ tela.setvisible(true); } } Outros Métodos do MouseAdapter : A classe MouseAdapter disponibiliza ainda os seguinte métodos: void mouseclicked(mouseevent e) Invoked when the mouse has been clicked on a component. void mouseentered(mouseevent e) Invoked when the mouse enters a component. void mouseexited(mouseevent e) Invoked when the mouse exits a component. void mousepressed(mouseevent e) Invoked when a mouse button has been pressed on a component. void mousereleased(mouseevent e) Invoked when a mouse button has been released on a component. Comentários: Nesse exemplo, a cada clique que o usuário fornecer, um retângulo azul é desenhado no JPanel. Prof. Vida (vida@utfpr.edu.br) 7

4. Menus A barra de Menus Como inserir uma barra de menus em um Frame? Como definir um menu? Como definir um ítem de menu? Como definir um sub-item de menu? Os menus de uma aplicação gráfica devem ser inseridos em uma barra de menus. Uma barra de menus denominada por menu é definida através da instrução, por exemplo: JMenuBar menu = new JMenuBar(); Para inserir uma barra de menus em um frame, a seguinte função deve ser chamada: setjmenubar(menu); Um elemento de Menu que estará visível na barra de menus é um elemento JMenu. Como exemplo, apresenta-se o seguinte código que define um elemento de de menu. JMenu mfile = new JMenu("File"); mfile.setmnemonic('f'); Nesse exemplo, além de definir um elemento de menu denominado por File, é definido como tecla de acesso a letra F. Um menu é adicionado na barra de menus, denominada por menu por exemplo, através da instrução: menu.add(mfile); Um ítem de menu pode ser um JMenuItem, como por exemplo: JMenuItem mexit = new JMenuItem("Exit",'E'); Esse ítem pode ser adicionado a um elemento menu, denominado por mfile, por exemplo através da instrução: mfile.add(mexit); Quando um ítem de menu for formado por sub-itens, esse ítem de menu não pode ser definido como um JMenuItem e sim como um JMenu. Por exemplo, o código a seguir irá colocar um ítem de menu chamado Cor que será o início de um novo menu, ou sub-menu. JMenu mselcor = new JMenu("Cor"); mselcor.setmnemonic('c'); mfile.add(mselcor); Um novo elemento Cor é definido como um JMenuItem. Esse elemento poderia conter os seguintes sub-itens: JMenuItem sm_corbranca = new JMenuItem("Branca",'B'); JMenuItem sm_coramarela = new JMenuItem("Amarela",'A'); mselcor.add(sm_corbranca); mselcor.add(sm_coramarela); Prof. Vida (vida@utfpr.edu.br) 8

Exemplo de Menus. Código Java para definição de Menus. Figura 2-Janela com Menu A Figura 2 ilustra um exemplo de menu. Nesse exemplo, menus e submenus foram definidos com os fragmentos de código Java apresentados anteriormente. O código completo que permite apresentar a janela da Figura 2 é apresentado a seguir. Nesse código, optou-se por criar a função criarmenus() para o desenvolvimento do menu. Essa função está definida entre as linhas 07 a 25. A linha 28 faz uma chamada a essa função recebendo como resultado dessa chamada, uma barra de menus. Em seguida, o menu é associado ao Jframe por meio da instrução setjmenubar( ) na linha 29. ////**************** arquivo MinhaQuintaJanela.java /*03*/ import java.awt.event.*; /*04*/ import java.awt.*; /*05*/ public class MinhaQuintaJanela extends MinhaQuartaJanela /*06*/ { /*07*/ private JMenuBar criarmenus() /*08*/ { /*09*/ JMenuBar menu = new JMenuBar(); /*10*/ JMenu mfile = new JMenu("File"); /*11*/ mfile.setmnemonic('f'); /*12*/ JMenu mselcor = new JMenu("Cor"); /*13*/ mselcor.setmnemonic('c'); /*14*/ sm_coramarela = new JMenuItem("Amarela",'A'); /*16*/ sm_corbranca = new JMenuItem("Branca",'B'); /*18*/ mselcor.add(sm_coramarela); /*19*/ mselcor.add(sm_corbranca); /*20*/ mexit = new JMenuItem("Exit",'E'); /*21*/ mfile.add(mselcor); /*22*/ mfile.addseparator(); /*23*/ mfile.add(mexit); /*24*/ menu.add(mfile); /*25*/ return menu;} /*26*/ public MinhaQuintaJanela(String titulo) /*27*/ { super(titulo); /*28*/ BarraDeMenus = criarmenus(); /*29*/ setjmenubar(barrademenus); /*30*/ } /*31*/ JMenuBar BarraDeMenus; JMenuItem sm_coramarela; /*33*/ JMenuItem sm_corbranca; JMenuItem mexit;} Prof. Vida (vida@utfpr.edu.br) 9

Teste da Classe MinhaQuintaJanela Como adicionar ações aos elementos do menu? Criação de uma classe específica para fazer a função de listener das ações. ////***** arquivo testeminhaquintajanela.java /*03*/ public class testeminhaquintajanela /*04*/ { public static void main(string[] a) /*05*/ { MinhaQuintaJanela tela = new /*06*/ MinhaQuintaJanela("Minha Quinta Janela"); /*07*/ tela.setvisible(true); } } A adição de interatividade pode ser feita com duas estratégias: 1. Criar uma classe específica para fazer a função de listener das ações. 2. Ou definir códigos dentro da classe filha de JFrame. Fica registrado aqui que não existe uma forma mais correta que a outra. Ambas as formas possuem aspectos positivos e negativos que acabam influenciando o programador experiente. Neste material de apoio, as duas formas serão analisadas. Essa estratégia é simples e pode ser resumida a: 1. definir uma classe 2. criar uma instância dessa classe e 3. associar essa instância ao elemento ou ítem de Menu. Exemplo: class Acoes implements ActionListener { public void actionperformed(actionevent evt) { if (evt.getsource() instanceof JMenuItem ) {JMenuItem quem = (JMenuItem)evt.getSource(); if (quem.getactioncommand() == "Exit") System.exit(0); } } } Exemplo de criação de instância dessa classe e associação com um elemento de menu: JMenuItem mexit = new JMenuItem("Exit",'E'); mexit.addactionlistener(new Acoes()); Quando há a necessidade de manipular atributos de algum objeto, pode-se definir um atributo para fazer referência a esse objeto. Por exemplo: class Acoes2 implements ActionListener { JPanel conteudo; Acoes2(JPanel c) {conteudo = c;} public void actionperformed(actionevent evt) { if (evt.getsource()instanceof JMenuItem ) {JmenuItem quem = (JMenuItem)evt.getSource(); if (quem.getactioncommand() == "Amarela") conteudo.setbackground(color.yellow); } } } Prof. Vida (vida@utfpr.edu.br) 10

Como definir código dentro da classe filha de JFrame? Código alterado. A outra estratégia é definir o código de maneira isolada, como por exemplo: JPanel conteudo = new JPanel(); JMenuItem sm_coramarela = new JMenuItem("Amarela",'A'); sm_coramarela.addactionlistener( new AbstractAction() {public void actionperformed(actionevent evt) {conteudo.setbackground(color.yellow);} } ); O JMenuItem sm_coramarela após instanciado tem o método addactionlistener definido com um código específico para ele. A grande vantagem dessa estratégia em relação à outra apresentada anteriormente é a possibilidade de fazer referência ou chamar instruções de objetos da classe filha de JFrame. Por exemplo, se o usuário selecionar esse elemento de menu, o painel denominado conteudo tem a sua cor de fundo modificada. Como a definição do listener está dentro da classe filha de JFrame, o método pode fazer referência a qualquer elemento do frame. ////**************** arquivo MinhaSextaJanela.java /*03*/ import java.awt.event.*; /*04*/ import java.awt.*; /*05*/ class Acoes implements ActionListener /*06*/ { /*07*/ /*08*/ public void actionperformed(actionevent evt) { /*09*/ if (evt.getsource() instanceof JMenuItem ) /*10*/ /*11*/ {JMenuItem quem = (JMenuItem)evt.getSource(); /*12*/ if (quem.getactioncommand() == "Exit") /*13*/ /*14*/ } System.exit(0); /*15*/ } } /*16*/ class Acoes2 implements ActionListener /*17*/ { /*18*/ /*19*/ JPanel conteudo; Acoes2(JPanel c) {conteudo = c;} /*20*/ public void actionperformed(actionevent evt) /*21*/ /*22*/ { if (evt.getsource() instanceof JMenuItem ) /*23*/ {JMenuItem quem = /*24*/ /*25*/ (JMenuItem)evt.getSource(); if (quem.getactioncommand() == "Amarela") conteudo.setbackground(color.yellow); /*26*/ if (quem.getactioncommand() == "Branca") conteudo.setbackground(color.white); /*27*/ } } } /*28*/ public class MinhaSextaJanela extends MinhaQuintaJanela /*29*/ { /*30*/ JPanel conteudo = super.conteudo; /*31*/ public MinhaSextaJanela(String titulo) /*32*/ { Prof. Vida (vida@utfpr.edu.br) 11

Exemplo de aplicação para testar o MinhaSextaJanela /*33*/ /*34*/ super(titulo); super.mexit.addactionlistener(new Acoes()); /*35*/ super.sm_corbranca.addactionlistener /*36*/ /*37*/ ( new AbstractAction() /*38*/ { public void actionperformed(actionevent evt) /*39*/ {conteudo.setbackground(color.white);} /*40*/ /*41*/ ); } /*42*/ super.sm_coramarela.addactionlistener(new Acoes2(super.conteudo)); /*43*/ }} ////***** arquivo testeminhasextajanela.java /*03*/ public class testeminhasextajanela /*04*/ { public static void main(string[] a) /*05*/ { MinhaSextaJanela tela = new /*06*/ MinhaSextaJanela("Minha Sexta Janela"); /*07*/ tela.setvisible(true); } } Prof. Vida (vida@utfpr.edu.br) 12

Como definir menus Flutantes? Um menu flutuante é criado de maneira similar a um menu comum. Um menu flutuante JPopupMenu é instanciado e itens são adicionados a ele. O exemplo abaixo, finaliza a aplicação. As modificações em negrito adicionam um menu flutante com as mesmas funcionalidades do menu definido anteriormente. Um menu flutuante é exibido através a instrução show(component, int, int). A linha 17 do código abaixo, define a visualização do menu. Um destaque deve ser dado à linha 16. Nessa linha é verificado se o usuário clicou chamando o menu pop-up (no Windows isso significa clicar com o botão direito do mouse) ou se o clique foi com o botão esquerdo chamando então a função de desenho. Exemplo de execução: Código Completo da aplicação: ////**************** arquivo MinhaSetimaJanela.java /*03*/ import java.awt.event.*; /*04*/ import java.awt.*; /*05*/ class GerenteMouse2 extends GerenteMouse /*06*/ { /*07*/ private JPopupMenu menu; /*08*/ public GerenteMouse2(JPanel janela /*09*/, JPopupMenu _menu) /*10*/ {super(janela); menu = _menu;} /*11*/ public void mousereleased(mouseevent evt) /*12*/ { /*13*/ super.mousereleased(evt); /*14*/ cliquex = evt.getx(); /*15*/ cliquey = evt.gety(); /*16*/ if (evt.ispopuptrigger()) /*17*/ {menu.show(evt.getcomponent() /*18*/,cliqueX, cliquey);} /*19*/ } /*20*/ } Prof. Vida (vida@utfpr.edu.br) 13

/*21*/ public class MinhaSetimaJanela extends MinhaSextaJanela /*22*/ { /*23*/ JPanel conteudo = super.conteudo; /*24*/ public JPopupMenu criarmenupopup() /*25*/ { /*26*/ JPopupMenu saida = new JPopupMenu(); /*27*/ JMenu mfile = new JMenu("File"); /*28*/ mfile.setmnemonic('f'); /*29*/ JMenu mselcor = new JMenu("Cor"); /*30*/ mselcor.setmnemonic('c'); /*31*/ sm_coramarela = new JMenuItem("Amarela",'A'); /*32*/ sm_corbranca = new JMenuItem("Branca",'B'); /*33*/ sm_coramarela.addactionlistener(new Acoes2(super.conteudo)); /*34*/ sm_corbranca.addactionlistener(new Acoes2(super.conteudo)); /*35*/ mselcor.add(sm_coramarela); /*36*/ mselcor.add(sm_corbranca); /*37*/ mexit = new JMenuItem("Exit",'E'); mexit.addactionlistener(new Acoes()); /*38*/ mfile.add(mselcor); /*39*/ mfile.addseparator(); /*40*/ mfile.add(mexit); /*41*/ saida.add(mfile); /*42*/ saida.add(mexit); /*43*/ return saida; /*44*/ } /*45*/ private JPopupMenu menuflutuante; /*46*/ public MinhaSetimaJanela(String titulo) /*47*/ { /*48*/ super(titulo); /*49*/ menuflutuante = criarmenupopup(); /*50*/ super.conteudo.addmouselistener(new GerenteMouse2(conteudo,menuFlutuante)); /*51*/ } /*52*/} Prof. Vida (vida@utfpr.edu.br) 14

Desafio: Ao apresentar o programa anterior ao usuário, ele solicitou uma pequena modificação. Adicionar uma opção no programa que permita selecionar a forma geométrica a ser desenhada na tela. O usuário deverá poder selecionar uma das seguintes formas: Retângulo (opção padrão). Círculo ou Elipse. O código java para desenhar essa figura é ilustrado a seguir: g.drawoval(cliquex, cliquey, 100, 100); O usuário ainda sugeriu que o menu tivesse a seguinte aparência: Tarefa de Casa: Implementar o pedido do usuário! Prof. Vida (vida@utfpr.edu.br) 15