ROTEIRO PARA AULA DE LABORATÓRIO DE LÓGICA DE PROGRAMAÇÃO - OO
SEMANAS: 31/08/2015 a 04/09/2015 e 08/09/2015 a 14/09/2015
AULA 14 – Interface Gráfica para Usuário em Java
1. OBJETIVO(S)
- Aplicar o conceito de herança em programação orientada a objetos.
- Desenvolver interfaces gráficas para usuário com Java.
2. MATERIAL UTILIZADO
Alunos: Lápis ou caneta, borracha, papel ou microcomputador, com o IDE jGRASP.
Professor: Lousa Branca e canetas para quadro branco e / ou microcomputador, com o
IDE jGRASP.
3. INTRODUÇÃO e PROCEDIMENTO
Os alunos devem abrir o JGRASP e seguir o roteiro abaixo passo a passo, item a item.
Quando necessário, o professor deve esclarecer dúvidas e dar as orientações para a
execução da tarefa e entendimento da matéria envolvida. Em seguida, os alunos
devem resolver os exercícios propostos no item 4.
****** Abaixo está descrita, uma maneira de criar interfaces gráficas para
usuário, com linguagem JAVA:
3.1 Criar uma classe que seja extensão da classe JFrame (javax.swing).
public class Login extends JFrame{ }
3.2 “Importar” os pacotes necessaries.
import javax.swing.*;import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
} // fim da classe Login
3.3 Declarar, como atributos, os objetos que devem aparecer dentro da
interface gráfica.
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão
private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto } // fim da classe Login
Ano: 2015
3.4 Escrever o construtor; na primeira linha do constructor, fazer a
chamada “super”.
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); } // fim do construtor
} // fim da classe Login
3.5 Criar um objeto “Container”, que receberá os objetos que aparecerão
na interface gráfica.
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( ); } // fim do construtor
} // fim da classe Login
3.6 Selecionar um “Layout” e atribuí-lo ao “Container”.
import javax.swing.*;import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( );
// ajusta um FlowLayout para o Container jaca.setLayout( new FlowLayout( ) ); } // fim do construtor
3.7 Instanciar os objetos que vão compor a interface gráfica.
import javax.swing.*;import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( ); // ajusta um FlowLayout para o Container jaca.setLayout( new FlowLayout( ) );
// instanciando os objetos da interface lLogin = new JLabel( “Login” ); lSenha = new JLabel( “Senha” ); tLogin = new JTextField( 10 ); tSenha = new JTextField( 10 ); bLogin = new JButton( “Enviar” ); } // fim do construtor
} // fim da classe Login
3.8 Adicionar os objetos no “Container”.
import javax.swing.*;import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( ); // ajusta um FlowLayout para o Container jaca.setLayout( new FlowLayout( ) );
// instanciando os objetos da interface lLogin = new JLabel( “Login” ); lSenha = new JLabel( “Senha” ); tLogin = new JTextField( 10 ); tSenha = new JTextField( 10 ); bLogin = new JButton( “Enviar” );
// Adiciona os objetos instanciados no Container jaca.add( lLogin ); jaca.add( tLogin ); jaca.add( lSenha ); jaca.add( tSenha ); jaca.add( bLogin ); } // fim do construtor } // fim da classe Login
Ano: 2015
3.9 Ajustar tamanho e localização; tornar o JFrame visível.
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Login extends JFrame {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( ); // ajusta um FlowLayout para o Container jaca.setLayout( new FlowLayout( ) );
// instanciando os objetos da interface lLogin = new JLabel( “Login” ); lSenha = new JLabel( “Senha” ); tLogin = new JTextField( 10 ); tSenha = new JTextField( 10 ); bLogin = new JButton( “Enviar” );
// Adiciona os objetos instanciados no Container jaca.add( lLogin );
jaca.add( tLogin ); jaca.add( lSenha ); jaca.add( tSenha ); jaca.add( bLogin );
// Ajusta tamanho e localização setSize( 200, 200 );
setLocation( 300, 300 ); // Torna a JFrame visível setVisible( true ); } // fim do construtor } // fim da classe Login
3.10 Dar funcionalidade ao botão.
import javax.swing.*;import java.awt.*; import java.awt.event.*;
public class Login extends JFrame
implements ActionListener
{private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( ); // ajusta um FlowLayout para o Container jaca.setLayout( new FlowLayout( ) );
// instanciando os objetos da interface lLogin = new JLabel( “Login” ); lSenha = new JLabel( “Senha” );
tLogin = new JTextField( 10 ); tSenha = new JTextField( 10 ); bLogin = new JButton( “Enviar” ); // torna o botão “sensível” a evento bLogin.addActionListener( this );
// Adiciona os objetos instanciados no Container jaca.add( lLogin );
jaca.add( tLogin ); jaca.add( lSenha ); jaca.add( tSenha ); jaca.add( bLogin );
// Ajusta tamanho e localização setSize( 200, 200 );
setLocation( 300, 300 ); // Torna a JFrame visível setVisible( true ); } // fim do construtor } // fim da classe Login
3.11 Escrever, na classe, o método actionPerformed( ), que será
responsável pelas ações que o programa executará, quando o usuário
clicar o botão.
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Login extends JFrame implements ActionListener {
private JButton bLogin; // botão private JLabel lLogin, lSenha; // rótulos
private JTextField tLogin, tSenha; // campos de texto public Login( )
{
// chama o construtor da superclasse super(“Digitar Login e Senha”); // prepara o Container
Container jaca = getContentPane( ); // ajusta um FlowLayout para o Container jaca.setLayout( new FlowLayout( ) );
// instanciando os objetos da interface lLogin = new JLabel( “Login” ); lSenha = new JLabel( “Senha” ); tLogin = new JTextField( 10 ); tSenha = new JTextField( 10 ); bLogin = new JButton( “Enviar” ); // torna o botão “sensível” a evento bLogin.addActionListener( this );
// Adiciona os objetos instanciados no Container jaca.add( lLogin );
jaca.add( tLogin ); jaca.add( lSenha ); jaca.add( tSenha ); jaca.add( bLogin );
// Ajusta tamanho e localização setSize( 200, 200 );
setLocation( 300, 300 ); // Torna a JFrame visível setVisible( true ); } // fim do construtor
Ano: 2015
public void actionPerformed( ActionEvent evento ){
// quando o botão bLogin for clicado, as ações a seguir serão // executadas
if( evento.getSource( ) == bLogin ) {
// captura o texto digitado pelo usuário no campo tLogin // armazenando-o na variável local login
String login = tLogin.getText( );
// captura o texto digitado pelo usuário no campo tSenha // armazenando-o na variável local senha
String senha = tSenha.getText( );
if( login.equals( “usuario” ) && senha.equals( “1234” ) ) {
JOptionPane.showMessageDialog( null, “Bem-vindo”, “Acesso Permitido”, 1 );
} else {
JOptionPane.showMessageDialog( null, “Login ou senha não são válidos”, “Acesso Negado”, 1 );
}
// limpa os campos de texto tLogin.setText( “” );
tSenha.setText( “” ); }
} // fim do método actionPerformed } // fim da classe Login
3.11 Criar, em outra classe, o método main( ), que irá instanciar a interface
gráfica programada na classe Login.
import javax.swing.*; public class TesteLogin {
public static void main( String args[ ] ) {
// instancia objeto da classe Login Login goiaba = new Login( );
// ajusta o botão “fechar” para encerrar a execução do programa goiaba.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }
} // fim da classe TestaLogin
Compilar as classes criadas e testar o funcionamento do aplicativo criado.
Resolver eventuais dúvidas com o professor e fazer os exercícios a seguir.
4. EXERCÍCIOS
4.1 Implementar a interface a seguir e dar funcionalidade. Seu funcionamento é
simples: o usuário digita valores nos dois primeiros campos de texto, clica no
botão da operação desejada. O aplicativo calcula e escreve o resultado no 3.o
campo de texto. Usar o bloco try...catch() onde e quando for necessário.
4.2 Escrever uma classe com o método main(), com a finalidade de testar os
métodos da hierarquia de classes criada no exercício 5.1 da aula 13 (Ponto,
Circulo e Cilindro), usando uma classes extendidas da classe JFrame, com
objetos das classes JButton, JLabel e JTextField (faça uma interface gráfica para
testar Ponto, uma para Circulo e uma para Cilindro). Usar o bloco try...catch()
onde e quando for necessário.
4.3 Escrever uma classe com o método main(), com a finalidade de testar os
métodos da hierarquia de classes criada nos exercícios 5.2 e 5.3 da aula 13
(PessoaFisica, Empregado, Desempregado, Mensalista, Horista, Tarefeiro e
Vendedor), usando uma classes extendidas da classe JFrame, com objetos das
classes JButton, JLabel e JTextField (faça uma interface gráfica diferente para
testar cada classe dessa hierarquia). Usar o bloco try...catch() onde e quando
for necessário.
4.4 Escrever uma classe com o método main(), com a finalidade de testar os
métodos da hierarquia de classes criada no exercício 5.4 da aula 13
(Pagamento, CartaoDeCredito, Cheque e Boleto), usando uma classes
extendidas da classe JFrame, com objetos das classes JButton, JLabel e
JTextField. Faça com que o aplicativo mostre um InputDialog, no qual o usuário
escolhe a forma de pagamento. Depois que o usuário seleciona a forma de
pagamento, o aplicativo mostra a interface gráfica (JFrame) adequada e
adaptada à selação do usuário. Usar o bloco try...catch() onde e quando for
necessário.
4.5 Nos exercícios anteriores, modifique as interfaces gráficas. Procure usar outros
gerenciadores de Layout (BorderLayout, GridLayout) e tente agrupar objetos
JLabel, JButton e JTextField, usando JPanel.
4.6 Uma Universidade deseja realizar um levantamento estatístico sobre seu
vestibular. Para isso, desenvolva um aplicativo em linguagem Java, com o que
se pede a seguir.
Escrever a classe Candidato, que tem como atributos únicos nome (String), cpf
(String), sexo (String) e codigoDoCurso (int) desejado pelo candidato. Escrever
também construtores, métodos de acesso, métodos modificadores e outros
métodos que você julgar necessários.
Ano: 2015
Escrever a classe Curso, que tem como atributos únicos nomeDoCurso (String),
codigoDoCurso (int) e numeroDeVagas (int). Escrever também construtores,
métodos de acesso, métodos modificadores e outros métodos que você julgar
necessários.
Escrever a classe Vestibular, cujos atributos únicos são:
- cursos, que é um ArrayList para armazenar objetos da classe Curso;
- candidatos, que é um ArrayList para armazenar objetos da classe Candidato.
Escrever também, na classe Vestibular:
a) um construtor sem parâmetros que inicie os atributos;
b) um método que calcule e retorne o número de candidatos inscritos por curso;
c) um método que calcule e retorne a percentagem de candidatos do sexo
feminino para cada curso;
d) um método que calcule e retorne o número total de inscritos no vestibular;
e) um método que calcule e retorne a relação candidato / vaga para cada curso.
Finalmente, escrever uma classe, com o método main( ), para executar a aplicação.
O aplicativo desenvolvido deve mostrar, no final, o resultado dos métodos dos itens de
a) até e) da classe Vestibular.
Faça o possível para desenvolver classes e métodos coesos e reduzir a quantidade de
acoplamentos entre classes. Para entrada e saída de dados, você pode desenvolver
interface gráfica de usuário com base na classe JFrame, ou também usar os métodos
showInputDialog() e showMessageDialog() em uso combinado com a interface gráfica
(JFrame) . Use o bloco try-catch, onde ele for necessário.
5. REFERÊNCIAS
• BARNES, D. J. KOLLING, M. Programação Orientada a Objetos com Java. 4 Ed. São Paulo: Pearson Prentice-Hall, 2009.
• GOLDMAN, A. KON, F. SILVA, P. J. S. Introdução à Ciência da Computação com Java e Orientação a Objetos. Disponível em http://ccsl.ime.usp.br/files/books/intro-java-cc.pdf.
• DEITEL, P. DEITEL, H. Java: como programar. 8 Ed. São Paulo: Prentice – Hall (Pearson), 2010. • http://programacaousjt.blogspot.com