Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Programação Orientada a Objetos Professora : Jane * Interface Gráfica com Swing Aula 2 Professora: Jane Programação Orientada a Objetos Professora : Jane * Hierarquia de classes 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 Programação Orientada a Objetos Professora : Jane * Revisando JOptionPane (idem aula 1) Uma versão mais completa do comando de caixa de diálogo contém quatro argumentos, como segue: JOptionPane.showMessageDialog(null, “Texto da Mensagem”, “Titulo da janela”, TIPOICONE); TIPOICONE Programação Orientada a Objetos Professora : Jane * Programação Orientada a Objetos Professora : Jane * Para entrada de dados utilizamos o comando showInputDialog, com uma variável do tipo String aguardando o retorno (as janelas retornam sempre uma string): String numLido = JOptionPane.showInputDialog( "Informe:" ); Note : Os métodos showInputDialog e showMessageDialog são static Programação Orientada a Objetos Professora : Jane * Exemplo com E/S (vide 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 ); //parseInt converte para inteiro n2 = Integer.parseInt( numero2 ); // somando resultado = n1 + n2; JOptionPane.showMessageDialog(null, "A soma é "+ resultado, "Resultado:", JOptionPane.PLAIN_MESSAGE); } } Já visto na aula 1 Programação Orientada a Objetos Professora : Jane * Classe JOptionPane Importar javax.swing Exercício 1 : Pessoas do sexo feminino de 30 até 65 anos ou pessoas do sexo masculino com 18 anos até 60 anos serão admitidos 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 maiúsculas ou minúsculas Exercício 2 : Provoque erro digitando um valor real ou um caracter quando solicitada a idade. O que caracteriza este erro ? Uma exceção ! Como administrar essa situação ? Capturando a exceção. Para isso, observe a classe da exceção. Note que é a classe NumberFormatException que está no pacote java.util. Veja a seguir o mecanismo de captura de uma ou mais exceções . Programação Orientada a Objetos Professora : Jane * Capturando exceções try { //trecho em que pode ocorrer uma ou mais exceções } catch ( <classe da exceção> <objeto>) { //programação para lidar com o erro } catch ( <classe da exceção> <objeto>) { //programação para lidar com o erro } finally { // O finally é opcional } Programação Orientada a Objetos Professora : Jane * Swing Como já vimos, no pacote javax.swing há classes semelhantes às classes do pacote java.awt (vide aula 1). No Swing temos : JPanel JLabel JTextField JButton JComboBox JList entre outras. Programação Orientada a Objetos Professora : Jane * A classe JFrame Como já falamos .... 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. Como se pode trabalhar ? Sem arrastar componentes do NetBeans, mas sim adicionando-os através de código. (Este é o objetivo do curso) Arrastando componentes da paleta do NetBeans. Programação Orientada a Objetos Professora : Jane * Classe JFrame Um frame, implementado como uma instância da classe JFrame, é um container, pois pode abrigar componentes. Na verdade, é um container top-level. As bordas, barra de título e outros acessórios são totalmente dependentes de plataforma. As aplicações com uma GUI, tipicamente, usam pelo menos um frame. Programação Orientada a Objetos Professora : Jane * Classe JFrame 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 principais : 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 (v=true) ou não (v=false). Obs.: show não se usa mais public void setDefaultCloseOperation(int op) : Faz a janela realizar uma determinada operação quando fecha. Mais comum: JFrame.EXIT_ON_CLOSE Programação Orientada a Objetos Professora : Jane * 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. Vamos testar ? Crie uma janela sem título e teste os métodos : setVisible setSize setTitle setDefaultCloseOperation Programação Orientada a Objetos Professora : Jane * 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 especificado para posicionar os componentes no container. Programação Orientada a Objetos Professora : Jane * Visualização geral (visto na aula 1) A forma com que os componentes aparecem dispostos no painel é chamada layout. No Swing é : JFrame JPanel JButton ... Programação Orientada a Objetos Professora : Jane * Layouts Cada container pode estar associado a um gerenciador de layout (LayoutManager). • Layout Managers : o FlowLayout no pacote java.awt - default para Panel o GridLayout no pacote java.awt o BorderLayout no pacote java.awt - default para Frame GridBagLayout no pacote java.awt • Para associar um LayoutManager a um Container deve-se utilizar o método setLayout . Exemplo : JFrame f = new JFrame("Janela Aplicacao"); f.setLayout(new FlowLayout()); // Associação ao FlowLayout Programação Orientada a Objetos Professora : Jane * Em um JFrame existem alguns containers " invisíveis " sobrepostos. O container mais superficial é chamado de " contentPane " (painel de conteúdo) e é a superfície na qual os componentes devem ser dispostos. Usa-se o método getContentPane para obter o “content pane” do frame. Assim : public Container getContentPane() : retorna o objeto “content pane” para o frame, que é um objeto de Container. Exemplo : JFrame f = new JFrame("Janela Aplicacao"); Container c = f.getContentPane(); c.setLayout(new FlowLayout()); No container c adicionaremos componentes, tais como botões, campos de texto, rótulos (labels), entre outros. Programação Orientada a Objetos Professora : Jane * Adicionando um botão ao painel de conteúdo Após obter o painel de conteúdo podemos adicionar componentes, como por exemplo, um objeto da classe JButton : JFrame f = new JFrame("Janela Aplicacao"); Container c = f.getContentPane(); c.setLayout(new FlowLayout()); JButton botao = new JButton(); c.add(botao); Programação Orientada a Objetos Professora : Jane * Classes JPanel e JFrame Outra forma possível é criar o frame e depois adicionar um painel. 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); Basta agora usar o setLayout se quisermos definir um layout diferente do padrão. Método add serve para adicionar. Programação Orientada a Objetos Professora : Jane * Método add E se quisermos adicionar um botão (objeto da classe JButton) ao painel ? Basta adicionar o trecho abaixo ao código já existente, considerando que o layout já foi definido. JFrame f = new JFrame("Outro exemplo de FlowLayout ); JPanel p = new JPanel(); f.add(p); JButton botao = new JButton(); //cria o objeto botão p.add(botao); Vamos testar ? Programação Orientada a Objetos Professora : Jane * Classe JPanel Portanto, um panel é um container que podemos usar para adicionar componentes. Construtores: public JPanel(): Cria um JPanel com o layout manager padrão (FlowLayout) public JPanel(LayoutManager mgr): Cria um JPanel com o layout manager especificado. Programação Orientada a Objetos Professora : Jane * Classe JButton Um botão é uma região clicável com a qual o usuário interage de forma a realizar um comando. Construtor e principais métodos: public JButton(String text): Cria um novo botão com o texto dado como parâmetro definido 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. Programação Orientada a Objetos Professora : Jane * 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 principais métodos: 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. Programação Orientada a Objetos Professora : Jane * JLabel Alguns construtores : JLabel() : Cria uma instância de JLabel sem imagem e sem título. JLabel(Icon imagem) : Cria uma instância de JLabel com a imagem especificada. JLabel(Icon imagem, int alinhamentoHorizontal) : Cria uma instância de JLabel com a imagem especificada e com alinhamento horizontal. JLabel(String texto) : Cria uma instância de JLabel com o texto indicado. Alinhamentos : Algumas constantes possíveis para alinhamentos são : LEFT CENTER RIGHT Programação Orientada a Objetos Professora : Jane * Vamos testar ? Adicione ao seu programa de teste : Um botão com o nome azul e outro com o nome verde Altere o nome do 1º. botão criado para vermelho Adicione um label : “Testando componentes no frame” antes do 1º. botão criado. Programação Orientada a Objetos Professora : Jane * 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. Vamos testar ? Programação Orientada a Objetos Professora : Jane * Layouts : FlowLayout Default do Panel Com este layout os componentes da interface são colocados da esquerda para a direita e podem, invadir a próxima linha. Programação Orientada a Objetos Professora : Jane * Código com FlowLayout import javax.swing.*; import java.awt.FlowLayout; import java.awt.Container; public class TesteFlowLayout { public static void main(String args[]) { JFrame f = new JFrame(); Container c = f.getContentPane(); c.setLayout(new FlowLayout()); c.add(new JButton("Botão 1 ")); c.add( new JTextField("TEXTO 1")); c.add(new JButton("Botão 2")); c.add( new JTextField("TEXTO 2")); c.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); } } O método setSize é herdado da classe Window. Lembre-se : um frame é um tipo de janela. Programação Orientada a Objetos Professora : Jane * Observação : A linha f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); usa o método setDefaultCloseOperation e a constante JFrame.EXIT_ON_CLOSE para indicar que o programa deve terminar quando a janela for fechada pelo usuário. Sem esta linha, o aplicativo não terminará quando o usuário fechar a janela. Tente redimensionar a janela. O que ocorreu ? Para que não seja possível redimensionar uma janela use objeto.setResizable(false); No caso do exemplo anterior : f. setResizable(false); Programação Orientada a Objetos Professora : Jane * Reescrevendo o ex. do slide 28 com panel 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"); //continua no próximo slide Programação Orientada a Objetos Professora : Jane * continuação //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); } } Programação Orientada a Objetos Professora : Jane * Exercício de fixação Escreva um programa para desenhar a seguinte interface usando, adequadamente, o layout visto. Programação Orientada a Objetos Professora : Jane * Layout : GridLayout Programação Orientada a Objetos Professora : Jane * Código com GridLayout import javax.swing.*; import java.awt.*; public class Teste { public static void main(String args[]) { JFrame f = new JFrame(); Container c = f.getContentPane(); c.setLayout(new GridLayout(2, 3)); c.add(new JButton("Botão 1")); c.add(new JTextField("TEXTO 1")); c.add(new JButton("Botão 2")); c.add(new JTextField("TEXTO 2")); c.add(new JButton("Botão 3")); f.setVisible(true); //Não usei setSize. O que acontecerá ? Teste pack() f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Vamos testar o método pack(). Programação Orientada a Objetos Professora : Jane * Exercício : Escreva uma aplicação em Java para desenhar uma janela com um campo de texto e 12 botões. O título da janela é Calculadora. Use dez botões para os dígitos de 0 a 9, um botão para soma e um botão para o sinal de =. Você desenhará uma calculadora simples. Portanto, use o melhor layout visto até agora para esta aplicação.
Compartilhar