Java Básico Criação de telas com Swing

Propaganda
Java Básico
Criação de telas com Swing
Marco Antonio,
Arquiteto de Software – TJDF
[email protected]
Novembro/2005
JFC – Java Foundation Classes
Swing
Look and feel
Java 2D
Drag and Drop
GUI – Graphical User Interface
As regras de usabilidade e o protótipo de tela devem
ser definidos antes do desenvolvimento.
Várias estratégias para implementação.
Valida as entradas do usuário (formatação de campos).
Informa aos usuários sobre problemas no sistema
(erros de rede, indisponibilidade dos servidores).
Responde a eventos do usuário (clique do mouse,
arrastar e soltar, mudança de campo).
A criação de telas com swing pode ser um trabalho
cansativo. É recomendado que se utilize uma
ferramenta para a criação de telas profissionais.
Tela de cadastro de pessoa
Para a classe Pessoa (nome, endereco,
telefone, cpf) crie um protótipo de tela com as
funcionalidades de inclusão, alteração, exclusão
e fechamento.
Swing
Container (contém outros componentes)
Telas, painéis
Componentes de controle
Botões, menus, textos, etc.
Componentes de controle
Botões – respondem a cliques do mouse
Rótulos – mostra informações sobre os controles
da tela
Texto – recupera dados digitados pelo usuário
Listas – possibilita a seleção de vários itens
Caixas de combinação – possibilita a seleção de
um dos itens
Caixas de seleção – funcionalidade de ligado,
desligado
JFrame
Ponto inicial para a construção de telas.
Para utilizar, importe o pacote javax.swing.*;
Todas as telas são subclasses de JFrame.
Crie os componentes gráficos e adicione ao
conteúdo da tela através do
getContentPane().add(novoComponente);
Dimensione a tela através do setSize(???, ???)
ou pack();
Torne a tela visível – setVisible(true).
PrimeiraTelaSwing
import javax.swing.*; //pacote obrigatório para usar o swing
public class PrimeiraTelaSwing extends JFrame { //subclasse de JFrame
public PrimeiraTelaSwing() { //utilize o construtor para dimensionar/mostrar a tela
setSize(100,100); //definindo um tamanho inicial
setVisible(true); //torna a tela visível, pois o padrão é invisível
}
}
TestePrimeiraTelaSwing
public class TestePrimeiraTelaSwing { //essa outra classe apenas levanta a tela
public static void main(String[] args) { //torna a classe executável
//chama o construtor da nossa tela
//o construtor irá dimensionar e mostrar a janela
PrimeiraTelaSwing tela = new
}
}
PrimeiraTelaSwing();
JButton
Recupera o clique do usuário.
Por padrão, não tem comportamento.
Utilize a estrutura abaixo para criar um JButton:
JButton btnGravar = new JButton(“Gravar”);
JButton btnFechar = new JButton(“Fechar”);
PrimeiraTelaSwing + JButton
import java.awt.*; //necessário para o flowlayout
import javax.swing.*;
public class PrimeiraTelaSwing extends JFrame {
JButton btnGravar = new JButton("Gravar"); //declare os objetos no início da classe
JButton btnFechar = new JButton("Fechar");
//utilize o construtor para adicionar os objetos na tela
public PrimeiraTelaSwing() {
setLayout(new FlowLayout()); //*posiciona os componentes um após o outro
getContentPane().add(btnGravar); //adiciona o primeiro botão
getContentPane().add(btnFechar); //adiciona o segundo botão
setVisible(true);
pack(); //dimensiona a tela baseando-se num tamanho padrão
}
}
// *o gerenciamento de layout é discutido em um capítulo a parte.
JTextField
A caixa de texto captura informação digitada pelo
usuário.
JTextField txtNome = new JTextField();
JTextField txtEndereco = new JTextField();
Caixas de texto em branco, sem tamanho definido
JTextField txtNome = new JTextField(null, 20);
JTextField txtEndereco = new JTextField(null, 30);
O primeiro parâmetro representa o texto (null) e o segundo é
o tamanho.
PrimeiraTelaSwing + JButton
import java.awt.*;
import javax.swing.*;
public class PrimeiraTelaSwing extends JFrame {
JTextField txtNome = new JTextField(null, 20);
JTextField txtEndereco = new JTextField(null, 30);
JButton btnGravar = new JButton("Gravar");
JButton btnFechar = new JButton("Fechar");
public PrimeiraTelaSwing() {
setLayout(new FlowLayout());
//os componentes serão apresentados na tela nessa ordem
getContentPane().add(txtNome);
getContentPane().add(txtEndereco);
getContentPane().add(btnGravar);
getContentPane().add(btnFechar);
setVisible(true);
pack();
}
}
JLabel
O rótulo torna uma tela mais fácil de usar, na
medida em que identifica os componentes com
um texto explicativo.
Utilize o exemplo abaixo para criar rótulos:
JLabel lblNome = new JLabel(“Nome: ”);
JLabel lblEndereco = new JLabel(“Endereço: ”);
PrimeiraTelaSwing + JLabel
import java.awt.*;
import javax.swing.*;
public class PrimeiraTelaSwing extends JFrame {
JLabel lblNome = new JLabel("Nome");
JLabel lblEndereco = new JLabel("Endereço");
JTextField txtNome = new JTextField(null, 20);
JTextField txtEndereco = new JTextField(null, 30);
JButton btnGravar = new JButton("Gravar");
JButton btnFechar = new JButton("Fechar");
public PrimeiraTelaSwing() {
//nesse caso, vamos usar 4 linhas e 2 colunas
setLayout(new GridLayout(4, 2));
getContentPane().add(lblNome);
getContentPane().add(txtNome);
getContentPane().add(lblEndereco);
getContentPane().add(txtEndereco);
getContentPane().add(btnGravar);
getContentPane().add(btnFechar);
setVisible(true);
pack();
}
}
JComboBox
Caixa de combinação onde o usuário pode
escolher um item entre vários possíveis.
É criado em duas etapas: primeiro crie os itens
que farão parte da combo, depois, crie a combo.
Veja o exemplo:
String[] sexos = {“Masculino”, “Feminino”};
JComboBox cboSexo = new JComboBox(sexos);
PrimeiraTelaSwing + JComboBox
import java.awt.*;
import javax.swing.*;
public class PrimeiraTelaSwing extends JFrame {
JLabel lblNome = new JLabel("Nome");
JLabel lblEndereco = new JLabel("Endereço");
JLabel lblSexo = new JLabel("Sexo");
JTextField txtNome = new JTextField(null, 20);
JTextField txtEndereco = new JTextField(null, 30);
JButton btnGravar = new JButton("Gravar");
JButton btnFechar = new JButton("Fechar");
String [] sexos = {"Masculino", "Feminino"};
JComboBox cboSexo = new JComboBox(sexos);
PrimeiraTelaSwing + JComboBox
public PrimeiraTelaSwing() {
setLayout(new FlowLayout());
getContentPane().add(lblNome);
getContentPane().add(txtNome);
getContentPane().add(lblEndereco);
getContentPane().add(txtEndereco);
getContentPane().add(lblSexo);
getContentPane().add(cboSexo);
getContentPane().add(btnGravar);
getContentPane().add(btnFechar);
setVisible(true);
pack();
}
}
Dúvidas
Exercícios
Implemente a tela de cadastro de pessoa que iniciamos
no exemplo.
Crie a classe TelaDeCadastroDePessoa e dentro do
pacote com.javabasico.swing
Crie uma classe para testar a tela.
Teste o pack() e o setSize() nas diversas situações que
vimos e analise o comportamento da tela.
Altere o gerenciador de layout entre FlowLayout e
GridLayout e analise o comportamento da tela.
TelaDeCadastroDePessoa
package com.javabasico.swing;
import java.awt.*;
import javax.swing.*;
public class TelaDeCadastroDePessoa extends JFrame {
JLabel lblNome = new JLabel("Nome: ");
JLabel lblEndereco = new JLabel("Endereço: ");
JLabel lblTelefone = new JLabel("Telefone: ");
JLabel lblCpf = new JLabel("Cpf: ");
JLabel lblSexos = new JLabel("Sexo: ");
JTextField txtNome = new JTextField(null, 20);
JTextField txtEndereco = new JTextField(null, 20);
JTextField txtTelefone = new JTextField(null, 20);
JTextField txtCpf = new JTextField(null, 20);
String[] sexos = {"Masculino", "Feminino"};
JComboBox cboSexo = new JComboBox(sexos);
JButton btnGravar = new JButton("Gravar");
JButton btnFechar = new JButton("Fechar");
TelaDeCadastroDePessoa
public TelaDeCadastroDePessoa() {
Container c = getContentPane();
setLayout(new GridLayout(0, 2));
setTitle("Cadastro de Pessoa");
c.add(lblNome);
c.add(txtNome);
c.add(lblEndereco);
c.add(txtEndereco);
c.add(lblTelefone);
c.add(txtTelefone);
c.add(lblCpf);
c.add(txtCpf);
c.add(lblSexos);
c.add(cboSexo);
c.add(btnGravar);
c.add(btnFechar);
setVisible(true);
pack();
}
}
TesteDaTelaDeCadastroDePessoa
package com.javabasico.swing;
public class TesteDaTelaDeCadastroDePessoa {
public static void main(String[] args) {
new TelaDeCadastroDePessoa();
}
}
Exercícios
Implemente uma tela para cadastro de
aeronaves.
Utilize todos os componentes mostrados até
agora.
Atributos da tela:
Finalidade do avião (transporte de carga,
passageiros)
Modelo
Quantidade de assentos
Autonomia
TelaDeCadastroDeAeronave
package com.javabasico.swing;
import java.awt.*;
import javax.swing.*;
public class TelaDeCadastroDeAeronave extends JFrame {
JLabel lblFinalidade = new JLabel("Finalidade: ");
JLabel lblModelo = new JLabel("Modelo: ");
JLabel lblQuantidadeDeAssentos = new JLabel("Quantidade de assentos: ");
JLabel lblAutonomia = new JLabel("Autonomia: ");
String finalidades[] = {"Carga", "Passageiro"};
JComboBox cboFinalidade = new JComboBox(finalidades);
JTextField txtModelo = new JTextField();
JTextField txtQuantidadeDeAssentos = new JTextField();
JTextField txtAutonomia = new JTextField();
JButton btnGravar = new JButton("Gravar");
JButton btnFechar = new JButton("Fechar");
TelaDeCadastroDeAeronave
public TelaDeCadastroDeAeronave() {
setLayout(new GridLayout(0, 2));
Container c = getContentPane();
setTitle("Cadastro de Aeronave");
c.add(lblFinalidade);
c.add(cboFinalidade);
c.add(lblModelo);
c.add(txtModelo);
c.add(lblQuantidadeDeAssentos);
c.add(txtQuantidadeDeAssentos);
c.add(lblAutonomia);
c.add(txtAutonomia);
c.add(btnGravar);
c.add(btnFechar);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
pack();
}
}
TesteDaTelaDeCadastroDeAeronave
package com.javabasico.swing;
public class TesteDaTelaDeCadastroDeAeronave {
public static void main(String[] args) {
new TelaDeCadastroDeAeronave();
}
}
Exercícios
Crie uma tela para cadastro de médico com os
atributos nome, especialidade (Combo), número
do crm.
TelaDeCadastroDeMedico
package com.javabasico.swing;
import java.awt.*;
import javax.swing.*;
public class TelaDeCadastroDeMedico extends JFrame {
JLabel lblNome = new JLabel("Nome: ");
JLabel lblEspecialidade = new JLabel("Especialidade: ");
JLabel lblNumeroDoCrm = new JLabel("Número do Crm: ");
String[] especialidade = {"Cardiologia", "Clínica Geral", "Ortopedia"};
JComboBox cboEspecialidade = new JComboBox(especialidade);
JTextField txtNome = new JTextField();
JTextField txtNumeroDoCrm = new JTextField();
TelaDeCadastroDeMedico
public TelaDeCadastroDeMedico() {
setLayout(new GridLayout(0, 2));
Container c = getContentPane();
setTitle("Cadastro de Médico");
c.add(lblNome);
c.add(txtNome);
c.add(lblEspecialidade);
c.add(cboEspecialidade);
c.add(lblNumeroDoCrm);
c.add(txtNumeroDoCrm);
setVisible(true);
pack();
}
}
TesteDaTelaDeCadastroDeMedico
package com.javabasico.swing;
public class TesteDaTelaDeCadastroDeMedico {
public static void main(String[] args) {
new TelaDeCadastroDeMedico();
}
}
Download