Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 SwingCriando Interfaces Gráficas com JavaIntrodução Linguagem de Programação - JavaProfessora: Mariana O. Silva, Esp., MeContato: mariana.silva@uniandrade.edu.br 2 Conteúdo da Aula • História; • Características do Swing; • Outras opções? 3 Um pouco de história ... Java 1.0: AWT (Abstract Window Toolkit ou Kit de desenvolvimento abstrato de janelas); Delega a criação dos componentes para a GUI (graphical user interface) nativa do SO (sistema operacional); Os componentes gráficos se adequam ao “Look and Feel” do SO; “Write Once, Run Everywhere”. Escreva uma vez e execute em qualquer lugar Problema! Nem todos os SO’s tem a mesma riqueza de componentes (Windows e MAC vs Motif). 4 Alguns exemplos de telas AWT: Exemplo: teaching.java.gui.sample01 5 Um pouco de história ... Em 1996, a Netscape trabalhava em um projeto chamado IFC (Internet Foundation Classes);Os componentes de tela eram desenhados integralmente na tela; Detalhe: eram desenhados pela IFC e não pelo SOVantagens? Muitas ...O visual da tela era o mesmo independente de SO;Era possível criar componentes que não estavam disponíveis em alguns SOs;Assim nascia o Swing: A Sun adotou a idéia da Netscape. O Swing começou a ser distribuído separadamente a partir da versão 1.1 do Java. A partir da versão 1.2 começou a fazer parte da JFC (Java Foundation Classes) O AWT não morreu!Continua sendo usado pelo Swing. O tratamento de eventos, por exemplo é AWT 6 Por que usar Swing?Vantagens? Um conjunto rico de elementos de interface; Pouquissima dependência da plataforma na qual ele está rodando; Comportamento consistente independente do SO. 7 Por que usar Swing?Desvantagens? Pode se apresentar um pouco mais lento que outros Toolkits por sempre desenhar a tela “com as próprias mãos!” 8 Tenho outras alternativas? Sim.O SWT (Standard Widget Toolkit) foi desenvolvido pela IBM;É mantido pela Eclipse Foundation;É escrito em Java;Acessa as bibliotecas nativas do SO usando JNI (Java Native Interface);É portavel ... Mas o Tookit é específico para cada Plataforma. 9 SWT Onde encontro mais informações sobre SWT? http://www.eclipse.org/swt/ 10 Swing Look and Feel Como vimos anteriormente, o Swing é responsável por desenhar suas próprias janelas;Quer dizer que o Swing terá apenas uma aparência em qualquer sistema operacional? Não! A Sun criou um mecanismo elegante chamado Look and Feel que permite que o desenvolvedor troque facilmente a skin a qualquer momento. 11 Swing Look and Feel Possui vários Look and Feel para cada SO• CrossPlatformLookAndFeel (padrão);• SystemLookAndFeel (Recupera do SO);• Synth (Configuração de Look and Feel via XML);• Multiplexing (Mistura de Look and Feel’s). 12 Swing Look and Feel - Exemplos Motif (UNIX) Windows Metal ou Ocean Exemplo: teaching.java.gui.sample02 13 SystemLookAndFeel – adequados ao SO Plataforma Look and Feel Solaris, Linux com GTK+ 2.2 ou superior GTK+ Outros Solaris, Linux Motif IBM UNIX IBM HP UX HP Classic Windows Windows Windows XP Windows XP Windows Vista Windows Vista Macintosh Macintosh 14 Frames 15 Criando uma JFrame public class FrameSimples { public static void main(String[] args) { JFrame frame = new JFrame(“F..les"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.setVisible(true); } }Exemplo: teaching.java.gui.sample03 16 Criando uma JFrame (cont.) Os componentes swing ficam no pacotejavax.swing;O método setSize(int,int) define uma framecom altura e largura em pixels;Como a JFrame nasce invisível, é possíveladicionar vários componentes nela e depoisacionar o método setVisible(true);Com o método setDefaultCloseOperationpodemos especificar qual será a ação aofechar a janela. javax = Java extension 17 Alterando e obtendo informações da FramesetLocation(x,y): Posiciona a frame no ponto x,y da janela do SO.setBounds(x,y,largura,altura): Muda a posição e tamanho da frame.setIconImage(Image img): Atribui um ícone à JFrame.setTitle(String title): Altera o titulo da frame.String getTitle(): Retorna o título corrente da frame. 18 Descobrindo o melhor tamanho de uma frame Pode ser necessário descobrir o tamanho da área útil!O usuário pode ter uma área útil de 800x600 ou 1280x1024. Sua aplicação deve prever isso em alguns casos. 19 Descobrindo o melhor tamanho de uma frame private void ajustarTamanho() { Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); // Ajusta para a metade da área util do desktop setSize((int)(screenSize.getWidth()/2), (int)(screenSize.getHeight()/2)); } Exemplo: teaching.java.gui.sample05 20 Alterando e obtendo mais informações da frame boolean isResizable():Verifica se a janela pode ser redimensionada.void setResizable(boolean resizable):Torna a janela redimensionável ou não.static void setDefaultLookAndFeelDecorated(boolean decorated):Permite ligar ou desligar a decoração Swing das bordas e componentes básicos da frame). Tem o mesmo efeito do código abaixo: frame.setUndecorated(true); frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 21 Inserindo elementos em uma Frame 22 Estrutura de uma Frame Swing Uma frame Swing é complexa e possui diversos painéis dentro da frame. Root Pane:Painel principal.Layered Pane:Armazena outros painéis como o Menu bar Pane e o Content Pane.Menu bar PaneOpcional: Contém os elementos do menu.Content PaneÁrea visível do painel. Mais usada pelos desenvolvedores.Glass PaneTrabalha como um painel de vidro no qual podemos abranger toda a área. Por default é invisível. 23 Quase todos os objetos Swing são JComponentTodos os componentes do Swing, que começam com “J” são filhos de JComponent, exceto JFrame e JDialog, que são componentes de alto nível;Esta classe inclui tudo o que é necessário para desenhar componentes e interceptar eventos. 24 Quase todos os objetos Swing são JComponent 25 Adicionando componentes em uma FrameComo vimos anteriormente, normalmente adicionamos componentes na ContentPane;Para adicionar um componente nesta área devemos: Obter o objeto ContentPane da frame a partir da JFrame (versões anteriores ao Java 5.0) Simplesmente chamar o método add(Component c) do objeto JFrame. minhaFrame.add(meuComponente); minhaFrame.getContentPane().add(meuComponente) 26 Criando um JComponent SimplesPara criar um JComponent específico é necessário herdar da classe JComponent e sobrescrever o método paintComponent;Este método recebe um objeto Graphicscomo parâmetro; O objeto Graphics possui várias funcionalidades para desenhar imagens e textos;Toda vez que a janela precisar ser redesenhada o método paintComponent é chamado. 27 Exemplo: Escrevendo uma String na tela public class MyFrame extends JFrame {...add(new MyStringComponent)...} public class ComponenteSimples extends JComponent { protected void paintComponent(Graphics g) { g.drawString("Usando Swing", 15,40); } } Exemplo: teaching.java.gui.sample06 28 Inserindo elementos gráficos na tela O método paintComponent recebe como parâmetro um objeto do tipo Graphics;O objeto do tipo Graphicspermite desenhar elementos na área do componente em um eixo 2D (x, y). 29 Inserindo elementos gráficos na tela Método Graphics.drawLine(x1,y1,x2,y2):Desenha uma linha a partir das coordenadas x,y iniciais e finaisExemplo: g.drawLine(100,100,420,312) 30 Inserindo elementos gráficos na tela Método Graphics.drawRect(x1,y1,width,height)Desenha um retângulo a partir das coordenadas x,y iniciais e largura (width) e height (largura)Exemplo: g.drawRect(72,160,200,35) 31 Inserindo elementos gráficos na tela Método Graphics.drawOval(x1,y1,width,height)Desenha uma figura oval a partir das coordenadas x,y iniciais e largura (largura) e height(altura)Exemplo: g.drawOval(300,120,100,75) 32 Inserindo elementos gráficos na tela Método Graphics.drawArc(x,y,w,h,startAngle,arcAngle)Desenha um arco a partir das coordenadas x,y iniciais, width(largura), height (altura) e ângulosExemplo: g.drawArc(100,100,80,60,45,120) Exemplo: teaching.java.gui.sample07 33 Mecanismo de repintura de telaToda vez que é necessário repintar a tela, o toolkit executará o método repaint() ou repaint(x,y,w,h) automaticamente;Caso seja necessário que a tela seja atualizada, nunca chame paintComponent diretamente. Use repaint!O repaint que será responsável por redesenhar as telas Exemplo: teaching.java.gui.sample07 e sample08 34 Han dsOn ! 35 O brigada! 36
Compartilhar