Dados em Java. Componentes GUI Parte II

Documentos relacionados
Programação Java. Construção de Interface gráfica. Processo Básico: OO + Eventos. Exemplo

Interfaces Gráficas: Interações Complexas

JAVA. Gerenciadores de Layout. Tiago Alves de Oliveira

Gerenciadores de Layout: Layout de Borda, de Fluxo, de Grade, de Conjunto de Grades, de Caixa, do Cartão e Nulo

Interface gráfica em Java: Swing e SWT

PROVA DE NOÇÕES DE INFORMÁTICA

JFC/Swing. LPGII - Java Interface Gráfica JFC/Swing. Introdução JFC / Swing. Introdução JFC / Swing

COM220 Aula 17: Interface Gráfica Containers Swing

WordPress Institucional UFPel Manual do tema UFPel 2.0

Lista de Exercícios da disciplina Aplicações de Linguagem de Programação Orientada a objetos

Podemos também definir o conteúdo dos menus da página inicial. Clique em Menus, Main Menu.

Posicionamento dos Componentes

LIBREOFFICE: APRESENTAÇÃO COM O IMPRESS. Professor: Francisco Dantas Nobre Neto

Apresentação do Microsoft Excel

O que é Microsoft Excel? Microsoft Excel. Inicialização do Excel. Ambiente de trabalho

JTextArea JMenuBar JTable JDesktopPane e JInternalFrame

Tutorial Autodesk Inventor Sheet Metal

2.1 Dê duplo clique com o botão esquerdo do mouse sobre o instalador.

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 1- Interfaces Gráficas com Swing

Introdução à Programação Gráfica em Java

Elaborando as Interfaces Aulas 43, 44 e 45

Microsoft Powerpoint 2003

Interfaces Gráficas POO. Prof. Márcio Delamaro

JMENU, JDESKTOPPANE E JINTERNALFRAME

Usando o painel do operador

Interfaces Gráficas com Swing. Professor Leonardo Larback

MREditor Editor de Impressos

MICROSOFT OFFICE EXCEL 2007

. Uma instância da classe JTextField gera uma instância da classe ActionEvent quando o objecto está activo e o utilizador pressiona a tecla ENTER.

Componentes GUI A aparência e maneira como um usuário pode interagir com componentes AWT diferem de acordo com a plataforma. Componentes Swing permite

PLANEJAMENTO UTILIZANDO GANTTPROJECT

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

O alimentador multiuso aceita papel dentro das seguintes dimensões:

1.2. Pacote para o armazenamento das telas Agora, será necessário criarmos um novo pacote para armazenarmos as nossas telas:

sumário CAPÍTULO 01 CAPÍTULO 02 CAPÍTULO 03 CAPÍTULO 04 CAPÍTULO 05 CAPÍTULO 06 CONHECENDO CORELDRAW X régua, linhas-guia e grade...

Agenda. JFC (Java FoundaNon Classes) Interfaces Gráficas: layout manager JFC. Componentes do Swing. Pluggable Look and Feel

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 4- Tratamento de Eventos em Interfaces Gráficas

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Aula 2 Even e to t s d o M ouse

PHP-GTK. Criando Aplicações Gráficas com PHP. Pablo Dall'Oglio. Segunda Edição Inclui PHP 5 e GTK 2. Novatec

MANUAL SERVIÇOS E AGENDAMENTO

Astra LX Computadores e Impressoras Guia para o processo de Configuração de Computadores e Impressoras conectadas ao Programa AstraLX.

Enviar fotos e vídeos entre duas câmeras da marca Canon (PowerShot SX60 HS)

Bem-vindo ao tópico sobre Cadastro e documentos.

Guia de impressão. Carregamento de bandejas. Guia de impressão. 1 Remova totalmente a bandeja.

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Formatar parágrafos no Word 2007/2010

Switch switch switch switch switch variável_inteira valor1 valor2 switch variável_inteira case case break switch case default default switch switch

Prof.ª: Dr. Maria Lúcia Pozzatti Flôres Organização: Gilberto Raitz Junior

FOLHA DE CÁLCULO ELABORAÇÃO DE GRÁFICOS

Elaborando as Interfaces Aulas 31, 32 e 33

Fundamentos de Informática. Tiago Alves de Oliveira

Largura A4 Orientação CR automático após LF Pitch AL Autom. após RC Tamanho do Ponto Nome da Fonte Conj. Símbolos. Origem Fontes Renum.

Java Swing: Netbeans

Inclusão de Novo Processo Administrativo

Utilizando a guia Inserir

Atualização de Software Guia do Usuário

Tutorial para uso em rede do PEC Produção

Backup e Recuperação Guia do Usuário

8. Interfaces Gráficas de Usuário

FUNDAMENTOS DE WINDOWS INFORMÁTICA / IFRN/PRONATEC 1. O Windows

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Gerenciadores de Layout

O QUE É O CALC PLANILHAS ELETRÔNICAS O Calc é um programa que trabalha com planilhas.

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Nona aula

País(es) : Brasil Banco(s) de Dados : Progress/Oracle

Diário Oficial Digital. Sistema web para pesquisa de mátérias Manual do usuário

Layout. Programação Orientada a Objetos Java. Prof. Geraldo Braz Junior. Baseado em material original de João Carlos Pinheiro CEFET/MA

KODAK PROFISSIONAL Câmera Digital DCS Pro SLR/c Guia do usuário - Seção de Otimização da Lente

GUIA BÁSICO CROQUI DIASI

Microsoft Excel Ficha prática n. 2

Programação Orientada a Objetos II

Welcome the programmation Linux with shell script!!! Seja bem vindo a programação Linux com shell script!!!

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 3- Desenvolvendo Interfaces Mais Ricas

Backup. O que é um backup?

Como tratar eventos - A interface ActionListener e o método actionperformed

1 de 8. entrada USB. 1 MENSAGENS

Impressora em Cores Xerox 800/1000 Impressão de divisórias

Manual do KBruch. Sebastian Stein Anne-Marie Mahfouf Tradução: Marcus Gama

Guia de Atualização. RIP 4.6 v2 para Grandes Formatos em Cores. Grandes Formatos em Cores Xerox RIP 4.6 v2. Guia de Atualização

Manual básico de criação de site responsivo com Dreamweaver CC2014

MANUAL DO SISTEMA TRT-5 PRESTADOR MÉDICO

Manual para apresentação de trabalhos acadêmicos. Resumo das normas da ABNT. Conceição Aparecida de Camargo

Instruções de utilização do CA-40 como modem GPRS Microsoft Windows Vista e 7

Transcrição:

Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. Interface Gráfica e Banco de Dados em Java Componentes GUI Parte II

Licença para uso e distribuição Este material está disponível para uso nãocomercial e pode ser derivado e/ou distribuído, desde que utilizando uma licença equivalente. Atribuição-Uso Não-Comercial- Compartilhamento pela mesma licença, versão 2.5 http://creativecommons.org/licenses/by-nc-sa/2.5/deed.pt Você pode copiar, distribuir, exibir e executar a obra, além de criar obras derivadas, sob as seguintes condições: (a) você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante; (b) você não pode utilizar esta obra com finalidades comerciais; (c) Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. 2

Objetivos desta parte Apresentar componentes gráficos mais complexos, como: Controles deslizantes e barras de progresso; Menus, barras de ferramenta e menus pop-up; Painel de abas, divisórias e bordas de painéis; Áreas de edição de texto; Janelas internas. Explicar como funciona o sistema de aparência e comportamento (look & feel) plugável; Entender o funcionamento do GridBagLayout. 3

JavaBeans Padrão definido pela Sun: Serializable com construtor default; Propriedades possuem getxyz() e setxyz() padronizados; Principal propósito: construtores de interface gráfica; A partir de agora, faremos referências a propriedades JavaBeans, e não a métodos de componentes. 4

JSlider: componente deslizante Determina um valor em um intervalo fechado; Instância de javax.swing.jslider: majortickspacing: espaçamento do traço maior; minortickspacing: espaçamento do traço menor; minimum e maximum: definem o intervalo; orientation: VERTICAL ou HORIZONTAL; paintlabels: mostra legenda; paintticks: mostra os traços; snaptoticks: só pode escolher valores marcados por traços. 5

JSlider: detectando mudanças ChangeListener método statechanged(); Propriedade value de JSlider: valor atual; Experimente: Crie uma janela com dois painéis: Painel central: construa uma classe que herda de JPanel e desenha um círculo, dado o diâmetro; Painel no rodapé: um JSlider de 0 a 400, com marcas maiores a cada 100 e menores a cada 50; Ao mudar o valor do slider, redesenhar o círculo com o novo diâmetro. 6

JSlider: legenda personalizada Podemos mudar a legenda do slider: Crie uma Hashtable (similar a um HashMap); Adicione pares número x componente. Ex.: Hashtable ht = new Hashtable(); // Troca a legenda 100 por Pequeno : ht.put(100, new JLabel("Pequeno")); Adicione ao slider com setlabeltable(). A tabela mapeia números a componentes GUI. Podemos então substituir os números por qualquer widget. Como poderíamos fazer para colocar imagens no rótulo do slider? 7

JFrame: mais sobre janelas Já vimos bastante sobre JFrame: Criação, título e exibição; Operação de fechamento e liberação de recursos; Configurações diversas: resizable, alwaysontop, etc. Para encerrar o assunto, discutiremos: Eventos de janelas; O painel de conteúdo; Menus e barras de ferramentas. 8

JFrame: eventos de janela Três ouvintes específicos de janela: WindowListener: windowactivated(); windowclosed(); windowclosing(); windowdeactivated(); windowdeiconified(); windowiconified(); windowopened(). 9

JFrame: eventos de janela WindowFocusListener: windowgainedfocus(); windowlostfocus(). WindowStateListener: windowstatechanged(). Todos os métodos recebem uma instância de WindowEvent; O adaptador WindowAdapter implementa todas estas interfaces. 10

JFrame: eventos de janela Teste os eventos de janela! Crie uma janela que contenha um rótulo que diga: Bom dia! quando a janela é aberta; Olá de novo! quando a janela for restaurada; ZZZ... quando a janela estiver inativa; Opa! quando a janela for reativada. Além disso, use JOptionPane para dizer: Até logo! quando a janela for minimizada; Adeus! quando a janela for fechada. 11

JFrame: o painel de conteúdo JFrames possuem a propriedade contentpane: painel exibido entre as bordas da janela; Até agora, criamos subclasses de JFrame; A partir de agora, criaremos classes que estendem JPanel e as colocaremos como painel de conteúdo de um JFrame; Justificativa: nosso painel pode ser usado em outros tipos de janela (ex.: janelas internas); Quando o JFrame precisar de configurações extensas (ex.: janela com menus), usaremos as duas abordagens. 12

JFrame: o painel de conteúdo public class PanelJSlider extends JPanel { /*... */ } public static void main(string args[]) { JFrame janela = new JFrame("Teste"); janela.setsize(600, 600); janela.setdefaultcloseoperation( JFrame.DISPOSE_ON_CLOSE); janela.setcontentpane( new PanelJSlider()); janela.setvisible(true); } 13

JMenuBar: adicionando menus Várias classes compõem um menu: JMenuBar: a barra de menus; JMenu: um menu; JMenuItem: um item dentro de um menu; JCheckBoxMenuItem: item com checkbox; JRadioButtonMenuItem: item com radio button; JSeparator: um separador de menus / itens. Todas do pacote javax.swing. 14

JMenuBar: propriedades JMenu, JMenuItem e subclasses: text: texto apresentado pelo menu; mnemonic: letra que ativa o menu pelo teclado; icon: ícone do menu; tooltiptext: dica de ferramenta (aparece quando o mouse paira sobre o menu / item). Adiciona-se itens e separadores à JMenus pelo método add(); A ordem que são adicionados indica a ordem que aparecerão. 15

Dicas de ferramentas Vimos que menus possuem uma propriedade tooltiptext; Tool tip é um texto que aparece quando o mouse paira sobre o componente; Todos os componentes possuem esta mesma propriedade, que pode ser configurada. 16

JPopupMenu: menu pop-up Um menu pop-up aparece quando clicamos com o botão direito em um componente; Funciona como um menu normal; Deve ser exibido usando o método show() parâmetros: Componente que ativou o pop-up; Posição X e Y onde o menu deve aparecer (relativo ao componente que ativou). ATENÇÃO: menus não podem compartilhar itens (adicionar o mesmo item a dois menus). 17

JToolBar: barra de ferramentas Instância de javax.swing.jtoolbar: floatable: se a barra pode ou não trocar de lugar e ser colocada como flutuante; Aceita qualquer widget; Para adicionar separadores, use JToolBar.Separator ao invés de JSeparator. 18

Menus e barras de ferramentas Experimente: Crie uma janela e coloque o painel do JSlider criado anteriormente; Adicione menus (normal e pop-up) e uma barra de ferramentas: menus básicos, troca de cor e de forma. 19

Look & feel O look & feel (aparência & comportamento, L&F ou LAF) define como serão exibidos os widgets; Componentes Swing possuem LAF plugável, isto é, pode ser alterado em tempo de execução; LAFs do Java SE: L&F Classe SO Metal javax.swing.plaf.metal.metallookandfeel Todos CDE/Motif com.sun.java.swing.plaf.motif.motiflookandfeel Todos GTK+ com.sun.java.swing.plaf.gtk.gtklookandfeel Linux Windows com.sun.java.swing.plaf.windows.windowslookandfeel Windows Outros podem ser baixados da Internet. 20

Mudando o LAF // import javax.swing.swingutilities; // import javax.swing.uimanager; // Obtém os LAFs instalados: UIManager.LookAndFeelInfo[] lafs; lafs = UIManager.getInstalledLookAndFeels(); // Obtém informações sobre o segundo LAF: String classe = lafs[1].getclassname(); String nome = lafs[1].getname(); // Altera para este LAF: UIManager.setLookAndFeel(classe); SwingUtilities.updateComponentTreeUI(this); 21

Janelas MDI MDI = Multiple Document Interface = Interface de Múltiplos Documentos; Classes JDesktopPane (container) e JInternalFrame (janela) javax.swing; Permitem a criação de janelas internas: Não aparecem na barra de tarefas; Podem ser maximizadas ou minimizadas dentro da área da janela MDI. 22

JDesktopPane & JInternalFrame JDesktopPane: Gerencia as janelas internas; Pode ser colocado no painel de conteúdo da janela ou ser o próprio painel de conteúdo; Método add() adiciona janelas internas. JInternalFrame: Muito similar ao JFrame; Logo no construtor, pode ser especificado: título, se pode redimensionar, se pode fechar, se pode maximizar e se pode minimizar; setframeicon(): atribui um ícone à janela. 23

JDesktopPane & JInternalFrame Experimente: Crie um JFrame que tenha um painel para disposição de janelas internas; Adicione um menu Nova janela que cria e exibe uma nova janela interna; Coloque o painel do teste do JSlider nas janelas criadas; Coloque um ícone na janela. 24

JInternalFrame: reposicionando Por padrão, janelas internas abrem todas na posição (0, 0); Podemos mudar sua posição com o método reshape() parâmetros: Coordenada X; Coordenada Y; Largura; Altura. 25

JInternalFrame: selecionando Algumas vezes a nova janela interna não é selecionada e trazida para frente por padrão; Você pode forçar esta seleção com setselected(true); Este método pode lançar uma PropertyVetoException, caso a atual janela selecionada se recuse a ceder a vez. 26

JDesktopPane: manipulando janelas Em algumas situações, você pode querer manipular todas as janelas internas; Ex.: colocá-las lado a lado ou em cascata. Para obtê-las, use o método getallframes() de JDesktopPane; Experimente: Adicione um menu Janela e um item Em cascata e disponha todas as janelas internas em cascata. Você precisará saber o estado de uma janela: use isicon() e setmaximum(). 27

JInternalFrame: eventos Janelas internas podem ser monitoradas por InternalFrameListener igual a JFrames; Alternativamente, podemos utilizar um VetoableChangeListener: PropertyChangeEvent como parâmetro; Propriedades propertyname e newvalue indicam o que está sendo solicitado; Ex.: propertyname = closed, newvalue = TRUE. Se o ouvinte lançar uma exceção, a propriedade não muda de valor (é realizado um veto). Pode ser feito com internalframeclosing(). 28

JOptionPane para janelas internas JOptionPane possui versões para janelas internas: showinternalconfirmdialog(); showinternalinputdialog(); showinternalmessagedialog(); showinternaloptiondialog(). Justificativa: diálogos internos gastam menos recursos do SO do que diálogos normais. 29

JProgressBar: medindo progresso Barras de progresso medem o andamento de uma tarefa específica; Instância de javax.swing.jprogressbar: minimum: valor mínimo; maximum: valor máximo; value: valor atual da barra; Igual ao JSlider! stringpainted: se o percentual é impresso em cima da barra de progresso; orientation: VERTICAL ou HORIZONTAL; string: o que está impresso em cima da barra. 30

Threads 101 Barras de progresso monitoram atividades que ocupam o processador; A atualização da barra de progresso também ocupa o processador; Precisamos processar estas duas atividades em paralelo. Para isso utilizamos threads; Threads ou linhas de execução são implementadas por java.lang.thread. 31

Threads 101 public class AtividadeSimulada extends Thread { private int minimo; private int maximo; private int valor; public AtividadeSimulada(int minimo, int maximo) { this.minimo = minimo; this.maximo = maximo; } public void run() { valor = minimo; while (valor++ < maximo) { try { sleep(100); } catch (InterruptedException e) { return; } } } 32

Threads 101 public int getvalor() { return valor; } } public static void main(string[] args) { AtividadeSimulada ativ; ativ = new AtividadeSimulada(0, 10); ativ.start(); } O método a sobrescrever é run(); O método a chamar é start(); Para interromper: interrupt(); Para ver se está ativa: isalive(). 33

Timer: monitoramento periódico Temos a barra de progresso, temos a atividade paralela. Falta o elo entre os dois: um timer; Recebe um intervalo e um ActionListener, ativando o evento de tempos em tempos; Criaremos um timer para monitorar a atividade e atualizar a barra de progresso; Instância de javax.swing.timer. 34

JProgressBar com timer e thread // A atividade ainda não foi iniciada. Inicia. if (atividade == null) { atividade = new AtividadeSimulada(0, 400); barraprogresso.setvalue(atividade.getvalor()); // O timer monitorará a atividade a cada 0,5 seg. timer = new Timer(500, new ActionListener() { public void actionperformed(actionevent e) { // Verifica se já acabou ou foi interrompida. if ((atividade == null) (! atividade.isalive())) { timer.stop(); atividade = null; botaoiniciar.settext("iniciar Simulação"); } else { 35

JProgressBar com timer e thread } }); } barraprogresso.setvalue(atividade.getvalor()); areatexto.append(atividade.getvalor() + "\n"); } atividade.start(); timer.start(); botaoiniciar.settext("parar Simulação"); // A atividade já foi iniciada. Interrompe. else { atividade.interrupt(); atividade = null; botaoiniciar.settext("iniciar Simulação"); } 36

Organizando o visual Algumas ferramentas que temos para organizar o visual de nossas janelas e painéis: Painéis com bordas; Divisórias; Painéis com guias. 37

Bordas dos painéis Painéis podem ser usados para organizar o layout isto nós já vimos; Podemos ir além e decorá-los com bordas: Classe javax.swing.borderfactory cria bordas; Pacote javax.swing.border contém bordas. 38

JSplitPane: divisórias Divide um painel/janela em duas áreas; Instância de javax.swing.jsplitpane: dividerlocation: distância da margem; dividersize: tamanho; orientation: HORIZONTAL_SPLIT ou VERTICAL_SPLIT; continuouslayout: atualizações contínuas; onetouchexpandable: presença de botões de expansão; resizeweight: como redimensionar os painéis quando o painel de divisória é redimensionado. 39

JSplitPane: experimente... Crie um painel com uma divisória no meio; À esquerda, coloque o painel do JSlider; À direita, coloque um texto de ajuda: Manipule o componente deslizante na parte inferior da janela para mudar o tamanho da figura desenhada acima dele. Use uma JTextArea, mudando sua cor de fundo para Panel.background; Coloque a área de texto em um JScrollPane, configurando sua borda como (No border). 40

JTabbedPane: múltiplas guias Mostra guias (abas, tabs) que permitem múltiplos painéis na mesma janela; Instância de javax.swing.jtabbedpane: addtab() adiciona uma guia: Título, ícone, componente, tooltip. inserttab() insere em uma dada posição: Título, ícone, componente, tooltip, índice. removetabat(índice) remove uma guia; setselectedindex(índice) seleciona uma guia; tablayoutpolicy: wrap ou scroll; tabplacement: TOP, LEFT, RIGHT, BOTTOM. 41

JTabbedPane: detectando mudanças ChangeListener método statechanged(); Propriedades selectedindex e tabcount; Experimente: Crie um painel com 6 guias, colocando em cada uma uma imagem diferente; Experimente diferentes políticas de layout e posicionamentos; Adicione um ouvinte que exiba a mensagem Esta é a última imagem sempre que a última imagem for exibida. 42

JEditorPane: texto rico O painel de edição permite exibir rich text em RTF ou HTML; A exibição de texto é razoável. Instância de javax.swing.jeditorpane: editable: se é editável; text: conteúdo (texto); setpage(url): carrega uma página dada a URL (pode lançar java.io.ioexception). Assim como JTextArea, deve ser usado dentro de um JScrollPane. 43

JEditorPane: detectando hiperlinks HyperlinkListener método hyperlinkupdate(); Recebe uma instância de HyperlinkEvent, a qual fornece um método geteventtype(): HyperlinkEvent.EventType.ACTIVATED; HyperlinkEvent.EventType.ENDERED; HyperlinkEvent.EventType.EXITED. 44

JEditorPane: experimente! Construa um navegador da Internet! 45

Relembrando GridLayout Divide o painel em células, como uma tabela; Cada célula contém até um componente; Construtor recebe número de linhas e colunas e, opcionalmente, espaçamentos vert. e horiz.; Componentes são dispostos na seqüência de leitura (ex.: [1, 1], [1, 2], [2, 1], [2, 2],...). 46

Relembrando GridBagLayout Similar ao GridLayout, porém: Colunas e linhas podem ter tamanhos diferentes; Componentes podem ocupar mais de uma célula; Uso de GridBagConstraints para configuração; Muito difícil de usar manualmente, requer IDE. 47

Entendendo o GridBagLayout O que determina a posição de um objeto são restrições impostas ao GridBag; Instância de java.awt.gridbagconstraints; Passada como 2º parâmetro do método add(). Propriedades: gridx e gridy: linha e coluna para posicionamento; gridwidth e gridheight: largura e altura (em número de células ocupadas no grid); weightx e weighty: peso na distribuição de espaço; anchor: posição do componente no espaço do grid; fill: se o componente deve ocupar todo o espaço. 48

Usando uma IDE 49

Conclusões Vimos nesta parte do curso: Controles deslizantes e barras de progresso; Menus, barras de ferramenta e menus pop-up; Painel de abas, divisórias e bordas de painéis; Áreas de edição de texto; Janelas internas; Sistema de aparência e comportamento plugável; O gerenciador de layout GridBagLayout. 50