Buscar

Aula 2 - POO

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.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais