Top-Level Containers. Interface com o Usuário. de classes empregadas para implementar a interface com o usuário.



Documentos relacionados
Java Foundation Classes Coleção de pacotes para criação de aplicações completas Desktop Interfaces gráficas (GUIs- Graphical User Interface)

Interface Gráficas Parte I. Bruno Crestani Calegaro

Aula 11: Interfaces gráficas (1/2): elementos de interface Swing

Interface Gráfica com o Usuário (GUI) Profa. Isabel Harb Manssour (Material adaptado das aulas da Profa. Luciana Nedel e do Prof.

8. Interfaces Gráficas de Usuário

Interface Gráfica. Prof. Marcelo Cohen

MÓDULO 4 SWING Parte 3

Programação Orientada a Objetos II

Curso de Aprendizado Industrial Desenvolvedor WEB

Pacote Java Swing Parte 1

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

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

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

INTERFACE COM O USUÁRIO (em Java) Programação Orientada a Objetos

Criação de Applets Package: Class Name Base Class: Generate header comments: Can run standalone: Generate Standard methods:

JFrame. JLabel : Utilizado como rótulo para exibição de texto e ícones. Interface Gráfica de JAVA - Graphical User Interface (GUI)

Interface com o Usuário (UI) UIs Desacopladas (2/3) BSI Bacharelado em Sistemas de Informação LOO Linguagens Orientadas a Objetos

Entender princípios de projeto. Capacitação para construir GUIs. Entender os pacotes que contém componentes de GUI, e as classes e interfaces de

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

Interface Gráfica. Prof. Marcelo Cohen. (material da Profa. Luciana Nedel) Graphical User Interface (GUI)

Tratamento de Eventos

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

JFC/Swing. Java Avançado Interface Gráfica JFC/Swing. Introdução JFC / Swing. Introdução JFC / Swing

Prof. Fernando V. Paulovich 25 de julho de SCC Programação Orientada a Objetos

Gerenciadores de Layouts

Técnicas de Programação II

Programação Orientada a Objetos II

Programação Java. Construção de Interfaces com Swing (I)

Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito.

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

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

Componentes Parte 03

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

Programação Orientada a Objetos em Java. GUI Graphical User Interface

Java - Swing. Raphaela Galhardo raphaela@j2eebrasil.com.br

Programação Orientada a Objetos

Programação Visual em Java

Desenvolvimento de Aplicações Desktop

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

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

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

Criando interfaces com o usuário. Continuação

Programação de Interfaces Gráficas. Aula 1. Carlos Eduardo de Carvalho Dantas

Criação de Applets com o JBuilder Professor Sérgio Furgeri

Capítulo 12 Eventos de interacção

JAVA. Gerenciadores de Layout. Tiago Alves de Oliveira

Curso Java Starter. 1

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

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.

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

Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico

1 Criando um aplicativo visual em Java

Programação Gráfica em Java.

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

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

Roteiro para criação de Applet

JCheckbox JRadioButton JComboBox JList JMenu... Alguns componentes já vistos em aula JButton JLabel JTextField

Curso de Java Módulo II Swing Fábio Mengue Centro de Computação - Unicamp

Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado.

Construção de Interfaces Gráficas

Guia de Início Rápido

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

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

Natureza do Software e dos Sistemas

Introdução a programação gráfica em Java com Swing

JTABLE STUDENT CONTROL JSC Gil Eduardo de Andrade / Emílio Rudolfo Fey Neto

Versão PIMACO AUTOADESIVOS LTDA. Assistente Pimaco Ajuda ao Usuário

Curso de extensão em Blender Prof. Luiz Gonzaga Damasceno

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

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico

Linguagem Java - Prof. Luciana Porcher Nedel 1. Um container genérico e visual. Ela trabalha em cooperação com o controle de layouts.

Gerenciamento de Layout

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

Gerenciadores de Layout Parte 1

Interface Gráfica. LPG II Java Interface Gráfica AWT. Introdução. AWT - Abstract Window Toolkit

Treinamento Excel 2010 Thalles Cezar Montenegro

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

ÍNDICE... 2 INTRODUÇÃO... 4

Sistema de Recursos Humanos

Posicionamento e Layout com CSS

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

Aplicações Gráficas com AWT

Is Event Dispatcher Threade (Animation)

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Table of Contents. PowerPoint XP

CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I E J

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

Informática Básica para o PIBID

GASweb - Usabilidade Parte 1-3

Interface Gráfica Swing. Leonardo Gresta Paulino Murta

Inserindo Dados no Banco de Dados Paradox.

Introdução ao Processamento de Imagens com o IRIS Por Rodolfo Barros

Desenvolvendo aplicações

Barra de Títulos. Barra de Menu. Barra de Ferramentas. Barra de Formatação. Painel de Tarefas. Seleção de Modo. Área de Trabalho.

Iniciando o MySQL Query Brower

Status. Barra de Título. Barra de Menu. Barra de. Ferramentas Padrão. Caixa de nomes. Barra de. Ferramentas de Formatação. Indicadores de Coluna

1 - INTRODUÇÃO AO AutoCAD 2011

Programação por Objectos. Interfaces gráficas. Swing 1/52

Construção de Interfaces Gráficas - Introdução

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Programando GUIs

Transcrição:

JFC e Swing Interface com o Usuário JFC e Swing n JFC Java Foundation Classconjunto de classes empregadas para implementar a interface com o usuário. n A API Swing foi incluída na versão 2 da plataforma Java,Java Paltaform Standard Edition (J2SETM), desda versão inicial (1.2). Top-Level Containers 1

General-Purpose Containers Special-Purpose Containers Controles Básicos 2

Informações não Editáveis Displays Interativos AloMundoSwing.java import javax.swing.*; public class AloMundoSwing { /** * Cria a GUI e a apresenta. */ private static void createandshowgui() { //Estabelece a decoração e look and feel. JFrame.setDefaultLookAndFeelDecorated(true); //Cria a janela com título. JFrame frame = new JFrame( AloMundoSwing"); frame.setdefaultcloseoperation(jframe.exit_on_close); //Adiciona o Label Alô Mundo!!!". JLabel label = new JLabel( Alô Mundo!!!"); frame.getcontentpane().add(label); 3

AloMundoSwing.java } //Apresenta a Janela. frame.pack(); frame.setvisible(true); } public static void main(string[] args) { //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.swingutilities.invokelater(new Runnable(){ public void run() { createandshowgui(); } }); } Importando Pacotes n A primeira linha importa o pacote swing: import javax.swing.*; n A maioria dos programas Swing também necessitam importar 2 pacotes AWT: import java.awt.*; import java.awt.event.*; Exemplo 1 n AloMundowing.java Neste exemplo o container é do tipo JFrame. Para criar e apresentar a janela é empregado o código abaixo: JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame( AloMundoSwing");... frame.pack(); frame.setvisible(true); 4

JLabel n Exceto os top-level containers, tais como JFrame, todos os componentes Swing são derivados de JComponent. n JLabel é um componente Swing que apresenta um texto. JLabel label = new JLabel( Alô Mundo!!!"); frame.getcontentpane().add(label); Adicionando componentes n Note que o componente JLabel não foi adicionado ao frame. n Todo top-level container tem um content pane que contem, direta ou indiretamente, todos os componentes visíveis (exceto os menus e as decorações das janelas). Container n Todo programa swing deve ter pelo menos um top-level container. n Esta janela principal é geralmente do tipo JFrame, JDialog, ou (para applets) JApplet. JFrame implementa uma janela principal JDialog implementa uma janela secundária JApplet implementa uma área de apresentação numa janela de um browser 5

Exemplo de Container Content Panel n Todo top-level container tem um panel onde são inseridos os controles. n Para adicionarmos um controle ao panel no exemplo 1 fizemos: frame.getcontentpane().add(label); Estrutura de Camadas 6

JRootPane n Em geral, não é criado diretamente um JRootPane. n É criado quando é instânciado um JInternalFrame ou um dos conainers do Swing, tais como JApplet, JDialog ou JFrame. JRootPane n Glass Pane Não é visível por default. Funciona como um vidro sobre todas as outras partes. n Layered Pane Posiciona os componentes, o content pane e o menu bar. n Content Pane É o container dos componentes visíveis do root pane. n Menu Bar (opcional) Onde fica a barra de menu. Fechando a janela n Para fechar o programa o botão fechar é clicado e o código abaixo faz o tratamento necessário para fechar o programa: frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); 7

Colocando tudo para rodar javax.swing.swingutilities.invokelater( new Runnable() { public void run() { /* create and show the GUI */ createandshowgui(); } }); Exemplo 2 n LookAndFeel.java Este exemplo ilustra: n Look and Feel n Instanciando Botões e Labels n Adicionando componentes n Colocando Bordas n Tratando Eventos JFrame n Uma instância da classe JFrame é uma janela típica com borda, título e ícones para fechar, maximizar e minimizar. Programa com GUI normalmente usam uma instância de JFrame. n Para fazer uma janela que apareça dentro de outra usa-se a classe JInternalFrame. 8

JFrame //1. Opcional: Especifica o Look and Feel. JFrame.setDefaultLookAndFeelDecorated(true); //2. Cria o frame. JFrame frame = new JFrame("FrameDemo"); //3. Opcional: O que acontece ao fechar frame.setdefaultcloseoperation(jframe.exit_on_close); //4. Cria os componentes e os coloca frame.getcontentpane().add(emptylabel, BorderLayout.CENTER); //5. Arruma o frame. frame.pack(); //6. Apresenta frame.setvisible(true); Tamanho e Posição n void pack() - Cria a janela num tamanho que possa conter todos os controles. n void setsize(...),dimension getsize() - Set ou get o tamanho da janela. n void setbounds(...),rectangle getbounds() - Set ou get o tamanho e posição da janela. n void setlocation(...), Point getlocation() - Set ou get a localização do canto superior esquerdo da janela. n void setlocationrelativeto(component) - Posição da janela centralizada sobre o componente especificado. Se o parâmetro for null é centralizada na tela. Framework.java 9

Look and Feel Java Look and Feel GTK+ Look and Feel Windows Look and Feel MacOS Look and Feel Look and Feel n Para configurar o comportamento foi usado o código: String lookandfeel = null;... lookandfeel = UIManager.getCrossPlatformLookAndFeelClassName();... try { UIManager.setLookAndFeel(lookAndFeel); } catch (Exception e) { }... // Create and show the GUI.. Look and Feel n Para o tratamento do evento ActionListener associado ao botão: button.addactionlistener( // cria a classe anônima new ActionListener(){ public void actionperformed(actionevent e) { numclicks++; label.settext(labelprefix + numclicks); initlookandfeel(); } }); 10

Look and Feel n Método initlookandfeel muda a aparência em função do número de cliks. private static void initlookandfeel(){ switch( numclicks % 4){ case 0: lookandfeel = "com.sun.java.swing.plaf.motif.motiflookandfeel"; break;... Labels n Através da classe JLabel, textos e imagens podem ser exibidos. n Se o componente é interativo e possui estados, deve ser empregada a classe JButton. n Ao ser utilizado código HTML como texto em um JLabel é possível: ter linhas múltiplas, fontes diferentes, várias cores, etc. Instanciando Labels n Abaixo apresentamos um código para instanciarmos um label:... // declarando as variáveis private static String labelprefix = "Number of button clicks: "; private int numclicks = 0;...// código de iniciação: final JLabel label = new JLabel(labelPrefix + "0 ");... label.setlabelfor(button);... // no tratamento de evento atualiza os clicks: label.settext(labelprefix + numclicks); 11

Botões n Swing utiliza a classe JButton para implementar botões. n JButton, assim como JLabels, pode apresentar tanto texto quanto imagens. n A letra sublinhada é uma atalho para o botão, sendo especificado pelo método setmnemonic. n Toda vez que um botão é clicado um evento ActionEvent é disparado. Instanciando Botões n Abaixo é apresentado um código para instanciar um botão: JButton button = new JButton( "I'm a Swing button!"); button.setmnemonic('i'); button.addactionlistener( /*...create an action listener...*/); Adicionando Componentes n Neste segundo exemplo os controles são agrupados em um painel (JPanel). Criamos o panel e estabelecemos o layout com uma única coluna: JPanel panel = new JPanel( new GridLayout(0,1)); Depois adicionamos os componentes: panel.add(button); panel.add(label); 12

Colocando Bordas n Este é o código que estabelece a borda: pane.setborder( BorderFactory.createEmptyBorder( 30, //top 30, //left 10, //bottom 30) //right ); Tratando Eventos n Toda vez que o usuário digita uma tecla ou clica o mouse um evento é gerado. n Um objeto pode ser notificado de um evento, para tal deve: Implementar a interface apropriada; e ser registrado como um event listener no event source apropriado. Tratando Eventos public class SwingApplication {... JButton button = new JButton("I'm a Swing button!"); button.addactionlistener( new ActionListener(){ public void actionperformed(actionevent e) { numclicks++; label.settext(labelprefix + numclicks); initlookandfeel(); } }); } 13

Tratando Eventos n Todo event handler necessita: Na declaração da classe event handler, a especificação que a classe implements uma interface listener ou extends uma classe que implementa uma interface listener. Registrar uma instância da classe event handler como um listener em um ou mais componentes. A classe event handler deve tem o código que implementa os métodos da interface listener. Tratando Eventos n Geralmente, para tratar o click do mouse deve ser implementada a interface ActionListener. Event Listners Some Events and Their Associated Event Listeners Act that Results in the Event User clicks a button, presses Enter while typing in a text field, or chooses a menu item User closes a frame (main window) User presses a mouse button while the cursor is over a component User moves the mouse over a component Component becomes visible Component gets the keyboard focus Table or list selection changes Any property in a component changes such as the text on a label Listener Type ActionListener WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener PropertyChangeListener 14

Exemplo 3 n CelsiusConverter.java Uso do JTextField Conversão JTextField n Este componente é um controle básico de texto que permite ao usuário entrar com um texto de uma linha. n Quando o usuário termina a edição (pressionando <Enter>) é lançado um evento. n Caso seja necessária mais de uma linha de edição deve ser usado o componente JTextArea. Instanciando JTextField n O código abaixo instancia um componente JTextField no exemplo 3: JTextField tempcelsius = null;... tempcelsius = new JTextField(5); n O parâmetro inteiro 5 no construtor define o número de colunas do campo. Este número é usado para calcular o comprimento do componente usado pelo layout manager. n Este número não limita quantos caracteres podem ser usados no componente. 15

Convertendo o valor n Para converter o valor digitado é criado um event hendler do tipo ActionListner para o click no botão ou para o <Enter> no JTextField. converttemp.addactionlistener(this); tempcelsius.addactionlistener(this);... public void actionperformed(actionevent event){ // Parse degrees Celsius as a double and // convert to Fahrenheit. int tempfahr = (int)((double.parsedouble(tempcelsius.gettext())) * 1.8 + 32); fahrenheitlabel.settext(tempfahr + " Fahrenheit"); } JTextArea n A classe JTextArea permite serem apresentados textos com múltiplas linhas e, opcionalmente, o usuário editar o texto. n Se o texto a ser apresentado for contante e não for editado pelo usuário deve ser empregada a classe JLabel. textarea = new JTextArea(5, 20); JScrollPane scrollpane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); textarea.seteditable seteditable(false); JTextArea n Sem a criação dos scroll pane, o JTextArea não irá permitir rolar o texto. A classe JScrollPane é empregada para isso, como no exmeplo apresentado. n Por padrão, JTextAreas são editáveis. O método seteditable(false) desbilita a edição. n Para adicionar texto ao objeto JTextArea empregase o método: private final static String newline = "\n";... textarea.append(text + newline); 16

JPasswordField n A classe JPasswordField é uma classe derivada de JTextField especializada para password. n O que for digitado, por razões de segurança, é substituído por um outro caracter tal como *, por exemplo. n O valor digitado é armazenado como um array de caracteres ao invés de uma String. passwordfield = new JPasswordField(10); passwordfield.setactioncommand(ok); passwordfield.addactionlistener(this);... char[] input = passwordfield.getpassword getpassword(); JPasswordField JButton n Um botão Swing pode apresentar tanto texto quanto imagens. n A letra sublinhada é um atalho e é especificada através do método setmnemonic(keyevent.vk_d). n Quando um botão está desabilitado o look and feel gera o aparência correspondente. n Geralmente a resposta ao click é implementada através do action listener. 17

Botão Default n O top-level container só pode ter um botão default (aquele que tem a aparência destacada e atende ao pressionar da tecla <Enter>). n Para definir o botão converttemp para default: converterframe.getrootpane(). setdefaultbutton(converttemp); Exemplo 4 n LunarPhases.java Layout Managers Compound Borders ComboBox Multiple Images Criando os Panels //Cria e apresenta os paineis phase selection e display. selectpanel = new JPanel(); displaypanel = new JPanel(); //Adiciona varios widgets aos sub panels. addwidgets(); //Cria o main panel que contem os dois sub panels. mainpanel = new JPanel(); mainpanel.setlayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS)); mainpanel.setborder(borderfactory.createemptyborder( 5,5,5,5)); //Adiciona os paineis select e display ao main panel. mainpanel.add(selectpanel); mainpanel.add(displaypanel); 18

Usando Layout Managers n A única hora que devemos nos preocupar com o layout manager é na instanciação do panel: JPanel pane = new JPanel( new BorderLayout()); n Ou por exemplo para o content panel: Container contentpane = frame.getcontentpane(); contentpane.setlayout(new FlowLayout()); Compound Borders n Uma compound border consiste de uma borda com título e uma borda vazia (para adicionar um espaço extra), como na figura abaixo: Compound Borders n O código para adicionar a compound border: // Add border around the select panel // selectpanel. setborder(borderfactory.createcompoundborder( BorderFactory.createTitledBorder( "Select Phase"), BorderFactory.createEmptyBorder(5,5,5,5)) ); 19

ComboBox n Uma combo box permite escolher uma opção de uma lista. n JComboBox pode permitir a edição ou não do texto. A forma default não permite a edição. n A combo box pode ser iniciada com um array de strings, no nosso exemplo fases da lua. n Também pode ser iniciado com um array de ícones ou com um vetor ou estrutura de dados. n O método setselectedindex especifica qual o valor incial a ser apresentado. ComboBox JComboBox phasechoices = null;... //Cria a combo box com as fases lunares. String[] phases = { "New", "Waxing Crescent", "First Quarter", "Waxing Gibbous", "Full", "Waning Gibbous", "Third Quarter", "Waning Crescent" }; phasechoices = new JComboBox(phases); phasechoices.setselectedindex( START_INDEX); Eventos com ComboBox n A combo box dispara um evento do tipo ActionListener quando o usuário seleciona um item. phasechoices.addactionlistener(this);... public void actionperformed(actionevent event) { if("comboboxchanged".equals(event.getactioncommand())){ //Update the icon to display the new phase phaseiconlabel.seticon( images[phasechoices.getselectedindex()]); } } 20

Multiple Images final static int NUM_IMAGES = 8; final static int START_INDEX = 3; ImageIcon[] images = new ImageIcon[NUM_IMAGES];... //Carrega as imagens. for (int i = 0; i < NUM_IMAGES; i++) { String imagename = "images/image" + i + ".jpg"; System.out.println("getting image: " + imagename); URL iconurl = LunarPhases.class.getResource(imageName); ImageIcon icon = new ImageIcon(iconURL); images[i] = icon; } Usando Layout Manager n O Java possui 7 layout managers: BorderLayout; BoxLayout; CardLayout; FlowLayout; GridBagLayout; GridLayout; e SpringLayout. Layouts 21

O que é Layout Manager? n O layout manager é um objeto que determina o tamanho e a posição dos componentes em um container. n Os componentes podem possuir atributos de tamanho e posição, mas a palavra final é do layout manager. n Cada objeto JPanel é inicializado com FlowLayout, a não ser que seja especificado outro. n O content pane usa o BorderLayout como default. Alterando o Layout Manager n Para alterar o layout manager de um JPanel, este pode ser especificado aundo o painel é instanciado: JPanel panel = new JPanel(new BorderLayout()); n Uma vez criado o container, o layout manager do content panel pode ser alterado através do método setlayout: Container contentpane = frame.getcontentpane(); contentpane.setlayout(new FlowLayout()); Adicionando Componentes n Há diferentes maneiras de se especificar como adicionar componentes ao JPanel, em função do tipo de layout manager. n Muitos layout managers simplificam isto adicionando os componentes baseados na ordem que são adicionados ao container. 22

Dimensões e Posição n Podem ser informadas as dimensões máximas e mínimas do controle, uma vez adicionado, através dos métodos: setminimumsize, setpreferredsize, e setmaximumsize. n Muitos layout managers não levam estes valores em conta, mas o BoxLayout e o SpringLayout sim. Alinhamento n Podem ser dadas informações sobre o alinhamento através dos métodos dos componentes: setalignmentx, e setalignmenty. n Ou sobrecarregando os métodos: getalignmentx, e getalignmenty. n Só o BoxLayout atende a estes métodos. Colocando Espaço n Três fatores influenciam no espaçamento dos componentes em um container: o layout manager; componentes invisíveis; ou bordas vazias. 23

Orientação n O atributo componentorientation permite que seja estabelecida a orientação de um componente, diferente da padrão esquerda para direita e cima para baixo. n Isto pode ser feito através dos métodos: setcomponentorientation; applycomponentorientation. n Os argumentos para estes métodos podem ser: ComponentOrientation.RIGHT_TO_LEFT, ou o método: ComponentOrientation.getOrientation getorientation(locale). Escolhendo o Layout Manager n Caso seja necessário apresentar um componente ocupando o máximo de espaço possível: se for um único componente use GridLayout ou BorderLayout. Caso contrário use BorderLayout ou GridBagLayout. Escolhendo o Layout Manager n Caso seja necessário apresentar alguns componentes em uma linha em tamanho natural. Use o JPanel para agrupar os compontes e o FlowLayout ou o BoxLayout. O SpringLayout também pode ser uma boa opção. 24

Escolhendo o Layout Manager n Caso seja necessário apresentar alguns componentes do mesmo tamanho em uma matriz: GridLayout. n Caso seja necessário apresentar alguns componentes em uma linha ou coluna, com espaçamento variável: BoxLayout. Escolhendo o Layout Manager n Caso seja necessário apresentar alguns componentes em colunas alinhadas, como em formulários onde os títulos dos campos estão numa coluna e os campos de edição estão na próxima coluna: SpringLayout. n A classe SpringUtilities define o método makecompactgrid que permite facilmente alinhar múltiplas colunas e linhas de componentes. Escolhendo o Layout Manager n Caso seja necessário apresentar componentes em um layout complexo temse: GridBagLayout, e SpringLayout. n Outra opção é agrupar os componentes em um ou mais JPanel. Com esta abordagem cada JPanel pode empregar um layout manager diferente. 25

BorderLayout n O BorderLayout tem 5 áreas especificadas pelas constantes: PAGE_START, PAGE_END, LINE_START, LINE_END, e CENTER. BorderLayout n Ao aumentar a janela, a área central ocupa grande parte do espaço disponível. n Geralmente são usadas apenas uma ou duas das áreas do BorderLayout só o centro (center), ou o center e o bottom. n No próximo slide será apresentado um exemplo usando o content pane. Como o content pane usa o BorderLayout por default, não foi necessário estabelecer o layout manager. Border Layout...// Container pane = aframe.getcontentpane()... JButton button = new JButton("Button 1 (PAGE_START)"); pane.add(button, BorderLayout.PAGE_START); // Faz o componente central grande como é típico // para o BorderLayout. button = new JButton("Button 2 (CENTER)"); button.setpreferredsize(new Dimension(200, 100)); pane.add(button, BorderLayout.CENTER); button = new JButton("Button 3 (LINE_START)"); pane.add(button, BorderLayout.LINE_START); button = new JButton("Long-Named Button 4 (PAGE_END)"); pane.add(button, BorderLayout.PAGE_END); button = new JButton("5 (LINE_END)"); pane.add(button, BorderLayout.LINE_END); 26

BorderLayout n O BorderLayout não coloca nenhum espaço entre os componentes. n Um espaço (gap) pode ser especificado (em pixels) através do construtor: BorderLayout(int horizontalgap, int verticalgap) n Também podem ser usados os métodos abaixo para especificar os gap hoprizontais e verticais, respecticvamente: void sethgap(int) void setvgap(int) BoxLayout n O BoxLayout empilha os componentes uns sobre os outros ou os enfileira. BoxLayout n O BoxLayout, quando em pilha, tenta posicionar os controles com a altura especificada. n Caso não haja espaço suficiente, serão ajustadas as alturas de cada componente. n Pode ser que não seja possível o correto posicionamento dos controles, uma vez que o BoxLayout respeita os valores mínimos e máximos de altura atribuídos aos controles. 27

CardLayout n O CardLayout auxilia a posicionar 2 ou mais componentes (geralmente instancias de JPanel). n É necessário permitir que o usuário escolha o componente, para tal podem ser usadas combo box ou tabbed pane, por exemplo. CardLayout CardLayoutDemo.java TabDemo.java FlowLayout n O FlowLayout posiciona os componentes em uma linha com os tamanhos por eles definidos e é o padrão para a classe JPanel. n Se o espaço horizontal não for suficiente são usadas várias linhas. n Se o espaço for maior que o necessário, por padrão, os controles são centralizados horizontalmente. n Pode ser especificado que o alinhamento seja a esquerda ou a direita, através do construtor, bem como especificar o espaçamento ao redor dos componentes. 28

FlowLayout contentpane.setlayout(new FlowLayout()); contentpane.add(new JButton("Button 1")); contentpane.add(new JButton("Button 2")); contentpane.add(new JButton("Button 3")); contentpane.add(new JButton( "Long-Named Button 4")); contentpane.add(new JButton("5")); GridLayout n O GridLayout posiciona os em uma grade. componentes n Cada componente ocupa completamente uma célula da grade e cada célula tem exatamente o mesmo tamanho. n Se o tamanho do container (a janela) for alterado o tamanho das células e dos componentes também é feito. GridLayout pane.setlayout(new GridLayout(0,2)); pane.add(new JButton("Button 1")); pane.add(new JButton("Button 2")); pane.add(new JButton("Button 3")); pane.add(new JButton("Long-Named Button 4")); pane.add(new JButton("5")); 29

GridBagLayout n GridBagLayout é um dos mais flexíveis e complexos dos layout managers. n Os componentes são posicionados em uma grade, permitindo que estes ocupem mais de uma célula. n As linhas não precisam ter a mesma altura e as colunas não necessitam ter a mesma largura. n Essencialmente, posiciona os componentes, com os seus tamanhos pré-definidos, em células de uma grade. A partir da dimensão dos componentes determina o tamanho das células. GridBagConstraints n Um código típico para usar o GRidBagLayout seria: JPanel pane = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); //Para cada componente a ser adicionado: //...Cria o componente... //...Atribui valores para a intancia do // GridBagConstraints... pane.add(thecomponent, c); GridBagConstriants JButton button; pane.setlayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL;... button = new JButton("5"); c.ipady = 0; //reset para o default c.weighty = 1.0; //coloca um espaço extra vertical c.anchor = GridBagConstraints.PAGE_END; // bottom of space c.insets = new Insets(10,0,0,0); //espaço no topo c.gridx = 1; //alinhamento com button 2 c.gridwidth = 2; //lagura de 2 colunas c.gridy = 2; //terceira linha pane.add(button, c); 30

GridBagConstriants n n gridx, gridy Especifica a linha e coluna do canto superior esquerdo do componente. Recomenda-se que seja especificado para cada componente. gridwidth, gridheight Especifica o número de colunas (gridwidth) e linhas (gridheight), especifica o número de células que o componente usa, não o número de pixels. O valor default é 1. Note: o GridBagLayout só permite que sejam usadas mais de uma linha pelo componente que estiver na coluna mais a esquerda ou se for especificado valores positivos para gridx e gridy. n GridBagConstriants fill Usado quando o componente é menor que a área alocada definindo como proceder para redimensionar o componente. Valores válidos (constantes GridBagConstraints): NONE (default), HORIZONTAL, VERTICAL, e BOTH. n ipadx, ipady Especifica o espaçamento interno. Quanto deve ser adicionado ao tamanho do componente. O valor default é zero. n insets Especifica o espaçamento externo, o espaço mínimo entre os componentes. O default é zero. GridBagConstriants n anchor Usado quando o componente é menor que a área e determina onde colocar o componnte. Valores válidos (constantes GridBagConstraints): CENTER (default), PAGE_START START, PAGE_END END, LINE_START START, LINE_END END, FIRST_LINE LINE_START, FIRST_LINE_END, LAST_LINE LINE_END, e LAST_LINE LINE_START. ------------------------------------------------- FIRST_LINE_START PAGE_START FIRST_LINE_END LINE_START CENTER LINE_END LAST_LINE_START PAGE_END LAST_LINE_END ------------------------------------------------- 31

GridBagConstriants n weightx, weighty Weights são usados para determinar como distribuir o espaço pelas colunas (weightx) e pelas linhas (weighty); é importante para o comportamento de redimensionamento. Se não for especificado nenhum valor diferente de zero, todos os componentes são colocados no centro da célula. GridBagLayout n Caso seja aumentada a janela do exemplo, pode-se notar que o botão 5 fica com todoo espaço vertical extra. n O novo espaço horizontal é dividido com as outras colunas. n Este comportamento é função dos weights que o programa estabeleceu para este componente. GridBagLayout 32

SpringLayout n O Springlayouts define relações entre as arestas dos componentes, por exemplo, define que a aresta esquerda de um componente fica a uma distância fixa da aresta direita de um outro componente. n Como padrão define a altura e largura de um componente (a distância entre as arestas superior e inferior, e entre as arestas esquerda e direita) para ser algo entre os valores máximos e mínimos, e, se possível, o preferred do componente. n A distância entre as arestas é representad por objetos Spring. Cada spring tem 4 atributos: minimum, preferred, maximum e o atual. n Os springs associados a cada componente são agrupados no objeto SpringLayout.Constraints Constraints. LunarPhases.java n Este exemplo possui 3 paineis (panels) Exemplo 5 n VoteDialog.java Radio Buttons Dialogs 33

Radio Button n Radio buttons são um conjunto de opções agrupadas onde apenas uma opção pode ser escolhida. n Swing implementa radio buttons através das classes JRadioButton e ButtonGroup classes. n Para colocar um radio button num menu, emprega-se a classe JRadioButtonMenuItem. Radio Button n Toda vez que um JRadioButton é clicado são gerados os eventos: ActionEvent; e um ou dois ItemEvent (um do que foi selecionado e outro do que perdeu a seleção). n Para cada grupo de radio buttons, é necessário criar uma instância de ButtonGroup e adicionar cada radio button a ela. JRadioButton e JButtonGroup n Para cada grupo de radio buttons, é necessário um JButtonGroup e adicionar cada JRadioButton a ele. n JButtonGroup são responsáveis por liberar o radio button quando o usuário seleciona uma outra opção no grupo. 34

JRadioButton e JButtonGroup final int numbuttons = 4; JRadioButton[] radiobuttons = new JRadioButton[numButtons]; final ButtonGroup group = new ButtonGroup();... final String defaultmessagecommand = "default"; final String yesnocommand = "yesno"; final String yeahnahcommand = "yeahnah"; final String ynccommand = "ync"; radiobuttons[0] = new JRadioButton("<html>Candidate 1: <font color=red>sparky the Dog</font></html>"); radiobuttons[0].setactioncommand(defaultmessagecommand); JRadioButton e JButtonGroup radiobuttons[1] = new JRadioButton("<html>Candidate 2: <font color=green>shady Sadie</font></html>"); radiobuttons[1].setactioncommand(yesnocommand); radiobuttons[2] = new JRadioButton("<html>Candidate 3: <font color=blue>r.i.p. McDaniels</font></html>"); radiobuttons[2].setactioncommand(yeahnahcommand); radiobuttons[3] = new JRadioButton("<html>Candidate 4: <font color=maroon>duke the Java<font size=-2> <sup>tm</sup> </font size> Platform ascot</font></html>"); radiobuttons[3].setactioncommand(ynccommand); for (int i = 0; i < numbuttons; i++) { group.add(radiobuttons[i]); } //Select the first button by default. radiobuttons[0].setselected(true); Dialogs n Para criar uma janela de diálogo simples, usa-se a classe JOptionPane. n Toda janela de diálogo é dependente de um Frame. 35

JOptionPane n Para apresentar uma janela de mensagem simples com JOptionPane: JOptionPane.showMessageDialog( frame, "There's no \"there\" there."); 36