Baixe o app para aproveitar ainda mais
Prévia do material em texto
LINGUAGEM DE PROGRAMAÇÃO - EDO0400 Semana Aula: 11 Unidade 5 - Introdução à interface gráfica Tema Introdução à interface gráfica Palavras-chave Interface gráfica (GUI), swing, awt, gerenciador de layout Objetivos O aluno deverá ser capaz de: Compreender o papel dos pacotes swing e awt na construção de interfaces gráficas. Conhecer a hierarquia de classes com a principais classes do awt e swing. Conhecer a classe JOptionPane e seus métodos e realizar aplicações. Conhecer métodos de conversão e realizar aplicações. Conhecer e escrever aplicações com as classes JFrame, JPanel, JLabel, JTextField, JButton e seus principais métodos. Conhecer e realizar aplicações com o gerenciador de layout FlowLayout. Estrutura de Conteúdo Visão geral do swing e awt Hierarquia de classes Classe JOptionPane e métodos showMessageDialog e showInputDialog. Conversão com parseInt, parseFloat e parseDouble Classes JFrame, JPanel, JLabel, JTextField, JButton, os construtores e métodos especificados a seguir. Gerenciador de layout : FlowLayout . Método setLayout. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Detalhando <<<<<<<<<<<<<<<<<<<< <<<<<<<<<<< Visão geral do swing e awt Uma interface gráfica com o usuário ou GUI (lê-se : ?gui?) fornece um mecanismo amigável ao usuário para interagir com o aplicativo. Exemplo de GUI : janela do Internet Explorer As GUIs são construídas a partir de componentes GUI. Tais componentes são chamados às vezes de controles ou widgets (abrevia-se : window gadgets). Um componente GUI é um objeto com que o usuário interage via mouse, teclado ou outro formulário de entrada, como reconhecimento de voz. JFC (Java Foundation Classes) é um conjunto de componentes e serviços GUI que simplificam o desenvolvimento de aplicações para desktop e para internet/intranet. JFC contém AWT (Abstract Window Toolkit) e Swing. Exemplo: import javax.swing.JOptionPane; public class Mensagem { public static void main (String[] args) { //comando para a caixa de diálogo JOptionPane.showMessageDialog(null, ?Esta é uma mensagem !?); //saída obrigatória do sistema System.exit(0); } } A maioria dos componentes swing são componentes Java puros, ou seja, são escritos, manipulados e exibidos em Java. Eles fazem parte do JFC (Java Foundation Classes), que representa bibliotecas do Java para desenvolvimento GUI para várias plataformas. Exemplos de componentes : botão, campo de texto ... Antes do swing ter sido introduzido na versão 1.2, os GUIs do Java eram construídas com componentes do Abstract Window Toolkit (AWT) do pacote java.awt. Quando um aplicativo Java com awt é executado em diferentes plataformas, os componentes são exibidos diferentemente em cada plataforma. Às vezes, a maneira como o usuário pode interagir com o componente awt particular difere entre as plataformas. Os componentes swing (botões, caixas de texto, etc...) permitem especificar uniformemente a aparência e o comportamento (look and feel) para o aplicativo em todas as plataformas ou utilizar a aparência e o comportamento personalizados de cada plataforma. Como os componentes swing são implementados em Java, são mais portáveis e flexíveis do que os componentes Java GUI originais do pacote java.awt. Os componentes Swing são conhecidos como componentes leves e os componentes AWT são conhecidos como componentes de peso, porque contam com o sistema de janela da plataforma local para determinar a funcionalidade, a aparência e o comportamento do aplicativo. Hierarquia de classes Object |_ Component (pacote java.awt) |_Container (pacote java.awt) |_JComponent (pacote javax.swing) Classe Component : declara muitos dos atributos e comportamentos comuns aos componentes GUI em pacotes java.awt e javax.swing. Classe JComponent : é superclasse de todos os componentes leves Swing e declara seus atributos e comportamentos comuns. Classe JOptionPane Métodos : 1) showMessageDialog Exemplo 1 : JOptionPane.showMessageDialog(null, "Esta é uma mensagem !"); Exemplo 2 : JOptionPane.showMessageDialog(null, "Texto da Mensagem", "Titulo da janela criada", TIPOICONE); onde TIPOICONE pode ser JOptionPane.ERROR_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.QUESTION_MESSAGE JOptionPane.PLAIN_MESSAGE 2) showInputDialog Exemplo : String numLido = JOptionPane.showInputDialog( "Informe:" ); Note : Os métodos showInputDialog e showMessageDialog são static. Como chamar um método estático ... Regra : classe.método Exemplo : Fonte : Deitel & Deitel import javax.swing.JOptionPane; public class Soma { public static void main( String args[] ) { String numero1, numero2; int n1, n2, resultado; numero1 = JOptionPane.showInputDialog ("Informe um inteiro:"); numero2 = JOptionPane.showInputDialog ("Informe outro inteiro"); // convertendo n1 = Integer.parseInt( numero1 ); //Converte para inteiro com parseInt n2 = Integer.parseInt( numero2 ); // somando resultado = n1 + n2; JOptionPane.showMessageDialog(null, "A soma é "+ resultado, "Resultado:", JOptionPane.PLAIN_MESSAGE); } } Hierarquia de classes ... detalhando java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent | +--javax.swing.JButton | +--javax.swing.JLabel | +--javax.swing.JMenuBar | +--javax.swing.JOptionPane | +--javax.swing.JPanel | +--javax.swing.JTextField | +--java.awt.Window +--java.awt.Frame +--javax.swing.JFrame Classe JFrame A maioria das janelas criadas serão instâncias da classe JFrame ou de uma subclasse de JFrame. JFrame fornece os atributos e comportamentos básicos de uma janela : barra de título na parte superior da janela, botões para minimizar, maximizar e fechar janela. Um frame, implementado como uma instância da classe JFrame, é um container, pois pode abrigar componentes. Na verdade, é um container top-level. As aplicações com uma GUI, tipicamente, usam pelo menos um frame. Alguns Construtores: JFrame() : cria um novo frame, inicialmente invisível JFrame(String titulo) : cria um novo frame, inicialmente invisível, com título. Métodos importantes para trabalhar com frames : public void setTitle(String title): Coloca um título na barra de título da janela. public void setVisible(boolean v): Faz com que o frame se torne visível (se v é true) ou não (se v é false). Atenção ! show não é mais usado !! public void setDefaultCloseOperation(int op) : Faz a janela realizar uma determinada operação quando fecha. Um possível argumento: JFrame.EXIT_ON_CLOSE, que é um int void setSize(int width, int height) : define o tamanho segundo a largura width e a altura height void pack() : dimensiona a janela para o tamanho mínimo necessário (preferido) para suportar os componentes. Classe Container Um container é um objeto que armazena componentes, governando suas posições, tamanhos e comportamentos quando o usuário altera seu tamanho. Principais métodos: public void add(Component comp) public void remove(Component comp) public void setLayout(LayoutManager mgr): Usa o layout manager (gerenciador de layout) especificado para posicionaros componentes no container. Container getContentPane : retorna o painel de conteúdo (content pane) do frame. Exemplo : JFrame janela = new JFrame(); Container painel = janela.getContentPane(); Será que a classe JFrame herda esses métodos ? Sim !! Layouts A forma com que os componentes aparecem dispostos no painel é chamada layout. Cada container pode estar associado a um gerenciador de layout (Layout Manager). Alguns Layout Managers : o FlowLayout - classe no pacote java.awt - default para JPanel o GridLayout - classe no pacote java.awt o BorderLayout - classe no pacote java.awt - default para JFrame Para associar um LayoutManager a um Container deve-se utilizar o método setLayout . Nesta aula veremos apenas o FlowLayout. Exemplo : JFrame f = new JFrame("Janela Aplicacao"); f.setLayout(new FlowLayout()); // Associação ao FlowLayout Exemplo : JFrame f = new JFrame("Janela Aplicacao"); f.setLayout(new FlowLayout()); JButton botao1 = new JButton ("Botão 1"); f.add(botao1); JButton botao2 = new JButton ("Botão 2"); f.add(botao2); Mais adiante veremos detalhes da classe JButton. JPanel É possível criar o frame e depois adicionar um ou mais painéis. Cada painel pode ter um gerenciador de layout. Em cada painel, podem ser adicionados várias componentes das classes JButton, JTextField, JLabel, entre outras. Exemplo : JFrame f = new JFrame("Outro exemplo de FlowLayout ); JPanel p = new JPanel(); f.add(p); O painel abrigará os componentes e poderá ter o seu layout redefinido com setLayout. E se quisermos adicionar um botão (objeto da classe JButton) ao painel ? Basta adicionar as duas próximas duas linhas : JButton botao = new JButton("OK"); //cria o objeto botão p.add(botao); Construtores da classe JPanel : public JPanel(): Cria um JPanel com o layout manager padrão (FlowLayout) public JPanel(LayoutManager mgr): Cria um JPanel com o layout manager especificado. Exemplo: JPanel p1 = new JPanel(new BorderLayout()); JPanel p2 = new JPanel(); Classe JButton Um botão é uma região clicável com a qual o usuário interage de forma a realizar uma ou mais ações. Dois construtores e principais métodos: public JButton(): cria um botão sem texto ou ícone. public JButton(String texto): Cria um novo botão com o texto dado como parâmetro definindo-o como texto do botão. public String getText():Retorna o texto mostrado no botão. public void setText(String text): Muda o texto de face do botão. Nota : É possível adicionar um ícone a um botão. Classe JLabel Um label é um texto a ser mostrado na tela que normalmente oferece informação para o usuário de forma a tornar a interface mais compreensível. Construtor e alguns métodos: public JLabel() : Cria uma instância de JLabel sem imagem e sem título. public JLabel(String text): Cria um novo label com o texto dado como parâmetro definido como texto de face. public String getText():Retorna o texto mostrado no label. public void setText(String text): Muda o texto de face do label. Nota : É possível adicionar um ícone a um label. Classe JTextField Um textfield (campo de texto) é semelhante ao label, só que pode ser editado e modificado pelo usuário. Textfields são usados geralmente para entrada de dados pelo usuário. Construtores e métodos: public JTextField() : constrói um novo campo de texto. public JTextField(int colunas): Cria um novo textfield com uma largura, em caracteres, dada pelo parâmetro. public JTextField(String texto) : constrói um novo campo de texto com o texto especificado. public String getText(): retorna o texto atualmente armazenado no campo. public void setText(String texto): Modifica o texto do campo para ser igual à string dada como parâmetro. Gerenciador de Layout : FlowLayout Default no painel (JPanel) Com este layout os componentes da interface são colocados da esquerda para a direita e podem, invadir a próxima linha. Exemplo : import javax.swing.*; import java.awt.FlowLayout; import java.awt.Container; public class TesteFlowLayout { public static void main(String args[]) { JFrame f = new JFrame(); f.setLayout(new FlowLayout()); f.add(new JButton("Botão 1 ")); f.add( new JTextField("TEXTO 1")); f.add(new JButton("Botão 2")); f.add( new JTextField("TEXTO 2")); f.add( new JButton("Botão 3")); f.setSize(200,400); //especifica a largura e a altura, respectivamente f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Obs.1: O método setSize é herdado da classe Window. Obs.2: Para que não seja possível redimensionar uma janela use objeto.setResizable(false); No caso do exemplo anterior : f. setResizable(false); Outra forma seria usar JPanel. Veja : import javax.swing.*; public class TesteFlowLayout { public static void main(String args[]) { //Instanciando ... JFrame f = new JFrame("Outro exemplo de FlowLayout ); JPanel p = new JPanel(); JButton b1 = new JButton("Botão 1 "); JButton b2 = new JButton("Botão 2 "); JButton b3 = new JButton("Botão 3"); JTextField t1 = new JTextField(?TEXTO 1?); JTextField t2 = new JTextField("TEXTO 2"); //Adicionando f.add(p); //adiciona o panel ao frame p.add(t1); //adiciona o textfield t1 ao panel p.add(b1); //adiciona o botão b1 ao panel p.add(t2); p.add(b2); p.add(b3); f.setSize(200,400); //especifica a largura e a altura f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } É possível redefinir o alinhamento com o método setAlignment. Veja os trechos : FlowLayout layout = new FlowLayout(); layout.setAlignment(FlowLayout.RIGHT); Para alinhar para a esquerda : : layout.setAlignment(FlowLayout.LEFT); NOTE : FlowLayout.CENTER : Faz com que os componentes sejam alinhados ao centro de cada linha de componentes. FlowLayout.LEFT : Alinha os componentes a partir da margem esquerda do gerenciador. FlowLayout.RIGHT : Alinha os componentes a partir da margem direita do gerenciador. Estratégias de Aprendizagem Para que o aprendizado seja proveitoso, o aluno deve se envolver ativamente na participação da aula, deve realizar as tarefas propostas, realizar testes por conta própria nos programas desenvolvidos e compartilhar sua experiência/conclusão com todos. Toda tarefa realizada pode ser conferida com o professor, para que haja certeza se está ou não correta. Indicação de Leitura Específica Aplicação: articulação teoria e prática Exercícios : 1 ) Pessoas do sexo feminino de 30 até 65 anos ou pessoas do sexo masculino com 18 anos até 60 anos serão admitidas na empresa XYZ. Faça uma aplicação em Java para ler o nome, o sexo (masculino ou feminino) e a idade de uma pessoa e informar se a pessoa foi ou não admitida. DICA : Para comparar strings use um dos métodos da classe String. Esta classe pertence ao pacote padrão java.lang, que não precisa ser importado. · equals · equalsIgnoreCase : retorna verdadeiro independente de letras serem maiúsculas ou minúsculas 2) Provoque erro digitando um valor real ou um caracter quando solicitada a idade. O que ocorreu ? Uma exceção ! Como administrar essa situação ? Capturando a exceção. Para isso, observe a classe da exceção. Note que é a classeNumberFormatException. Agora, adicione código para capturar exceção no exercício anterior. 3) Escreva um programa para desenhar uma interface usando, adequadamente, o layout visto. A janela deverá ter um título e ainda, os seguintes componentes : >> dois labels : Temperatura em Celsius : Temperatura em Fahrenheit : >> dois campos de texto relativos às temperaturas de entrada e de saída >> um botão que permitirá converter a temperatura em celsius para a temperatura em fahrenheit. Considerações Adicionais
Compartilhar