Agenda Interfaces Gráficas: layout manager joao@ecomp.uefs.br JFC (Java FoundaNon Classes) Swing componentes Gerênciamento de Layout BoderLayout, FlowLayout,... Departamento de Ciências Exatas Universidade Estadual de Feira de Santana 1 JFC (Java FoundaNon Classes) JFC (Java FoundaNon Classes) grupo de classes para auxiliar no desenvolvimento de interfaces gráficas (GUIs) independente de plataforma JFC versus AWT e Swing AWT e Swing fazem parte do JFC Swing versus AWT AWT foi a solução adotada inicialmente, enquanto Swing é a plataforma atual Swing usa parte do AWT JFC Componentes do Swing componentes como botão e lista Pluggable Look and Feel Acessibilidade tecnologias assisnvas, como leitores de tela e displays Braille Java 2D tecnologias para incorporar gráficos e imagem Internacionalização suporte para aplicações que permitem interagir com usuários que falam diferentes línguas 2 3 Componentes do Swing Pluggable Look and Feel As figuras abaixo são extraídas de um mesmo programas com diferentes look and feel UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.WindowsLookAndFeel"); 4 5 1
Java 2D http://stendhalgame.org/ Swing Vários componentes listas, menus, áreas de texto, botões,... Os componentes são organizados em um hierarquia de armazenamento (containers) containers de nível mais alto, ex: JFrame containers intermediário, ex: JPanel Um container é um componente que pode conter outros componentes descendem da classe java.awt.container 6 7 Containers de nível mais alto Todo programa que unliza o Swing tem ao menos um container de nível mais alto O container de nível mais alto é quem provê todo o suporte para pintar os componentes e gerenciar os eventos Existem três container de nível mais alto JFrame (janela principal) JDialog (janela secundária) JApplet (executa dentre de um browser) 8 9 Containers de nível mais alto Todo container de nível mais alto tem um container de conteúdo (ContentPane) um container de menu (MenuBar) Frame MenuBar ContentPane JFrame JFrame é uma janela que tem uma borda, ltulo e botões para fechá- la e minimizá- la Aplicações para Desktop em Java unlizam ao menos um JFrame Métodos principais void settitle(string title): define um ltulo void setvisible(boolean v): torna o frame visível void setdefaultcloseoperation(int op) : realiza uma determinada operação ao fechar. Mais comum: JFrame.EXIT_ON_CLOSE 10 11 2
Container de conteúdo Todo container de nível mais alto contém um container de conteúdo (content pane) Os componentes (JBupon, JLabel,...) devem ser adicionados ao container de conteúdo e não ao container de nível mais alto! componentes são adicionados no container através do método add os containers unlizam um layout manager para posicionar os componentes adicionados Exemplo import javax.swing.*; import java.awt.*; public class HelloWorld { } public static void main(string[] args){ } JFrame frame = new JFrame("HelloWorld"); frame.setsize(100,100); frame.setdefaultcloseoperation(jframe.exit_on_close); JLabel label = new JLabel("Hello world!", Jlabel.CENTER); frame.getcontentpane().add(label); frame.setvisible(true); Container de nível mais alto Container de conteúdo 12 13 JComponent Componentes JComponent é a classe base para todos os componentes Swing como JBupon Todos os componentes que herdam de JComponent devem ser adicionados a hierarquia de containers A classe JComponent provê look and feel, tratamento de eventos de teclado, ferramenta para exibir dica (toolnp), infra- estrutura para desenho, suporte a bordas, etc. JBupon e JLabel: botão e rótulo settext/gettext para atualizar e ler o texto JTextField: caixa de texto construtor: JTextField(int columns) settext/gettext para atualizar e ler o texto Inicialmente os componentes não tem ação Adicionando informação a um JComponent putclientproperty(key:object,value:object); Object getclientproperty(key:object); 14 15 Containers de conteúdo Também conhecidos como panels e panes Eles simplificam o posicionamento de outros componentes que são adicionados neles Exemplos de containers de conteúdo JPanel (mais comum) JScrollPane JTabbedPane Você pode definir o layout de um container através do método setlayout() Gerenciamento de Layout Definição processo que consiste em determinar o tamanho e a posição dos componentes na tela Em Java, o gerenciamento de layout é feito através dos Layout Managers Existem vários Layout Managers pré- definidos absoluto (não tem gerenciador de layout) Alguns: BorderLayout, GridLayout, FlowLayout, BoxLayout, GridBagLayout, CardLayout 16 17 3
Absoluto (sem Layout Manager) O tamanho e a posição de cada componente deve ser especificado pelo programador Não ajusta bem quando o container top- level muda de tamanho Requer um ajuste complexo quando mudamos de sistema operacional problemas devido a resoluções, tamanhos de fonte, etc. Deve ser evitado! Usando um Layout Manager (1) O Layout Manager decide onde os componentes devem ser posicionados na tela isso é feito automancamente quando adicionamos um componente no panel/pane Exemplo BorderLayout (posição relanva) add(label,borderlayout.center); FlowLayout GridLayout (ordem de adição) add(label); 18 19 BorderLayout Exemplo Cinco áreas para armazenar componentes north, south, east, west, e center north, south, east, west tem um atributo fixo center fica com todo o espaço restante Container container = new JPanel(new BorderLayout()); JFrame frame = new JFrame("BorderLayoutExample"); frame.setsize(300,300); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setcontentpane(container); JLabel label = new JLabel("Center",JLabel.CENTER); container.add(label, BorderLayout.CENTER); container.add(new JButton("North"), BorderLayout.NORTH); container.add(new JButton("South"), BorderLayout.SOUTH); container.add(new JButton("East"), BorderLayout.EAST); container.add(new JButton("West"), BorderLayout.WEST); frame.setvisible(true); 20 21 FlowLayout Os componentes são adicionados no panel/ pane da esquerda para direita iniciam uma nova linha caso necessário Os componentes tem tamanho default Este é o Layout default de JPanel GridLayout Posiciona os componentes em um grid o programador define o número de linhas e colunas Os componentes são adicionados da esquerda para direta, e do topo para baixo Força os componentes a assumirem o tamanho da célula do grid 22 23 4
BoxLayout CardLayout Os objetos são alinhados em uma linha ou coluna Os objetos usam o tamanho default Criando um BoxLayout Permitem que vários componentes (JPanel) comparnlhem a mesma área na tela Conceitualmente cada JPanel corresponde a uma carta. As cartas ficam uma sobre as outras Box.createHorizontalBox(); Box.createVerticalBox(); o usuário decide a carta que deseja exibir 24 GridBagLayout 25 Combinando Layout Managers GridBagLayout é o mais flexível e complexo Layout Manager Os componentes são adicionados seguindo um grid Vários Layout Managers podem ser combinados para compor telas complexas alguns componentes podem ocupar mais de uma célula colunas e linhas podem ter tamanhos (width/length) diferentes 26 27 Créditos Resumindo (1) Alguns slides unlizados nesta apresentação foram baseados nos seguintes slides Swing tem vários componentes Os componentes são organizados em um hierarquia de armazenamento (containers) Adam Carmi, "IntroducNon to JFC Swing" Ricardo Linden, "Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico" Ricardo Linden, "Interfaces Gráficas (GUIs) em Java usando Swing Parte II Tratando Eventos" um container pode conter outros componentes componentes unlizam um layout manager Gerenciamento de layout processo que consiste em determinar o tamanho e a posição dos componentes na tela 28 29 5