31
Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF [email protected] Novembro/2005

Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF [email protected] Novembro/2005

Embed Size (px)

Citation preview

Page 1: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

Java Básico

Criação de telas com Swing

Marco Antonio,

Arquiteto de Software – TJDF

[email protected]

Novembro/2005

Page 2: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

JFC – Java Foundation Classes

Swing

Look and feel

Java 2D

Drag and Drop

Page 3: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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.

Page 4: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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.

Page 5: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

Swing

Container (contém outros componentes)

Telas, painéis

Componentes de controle

Botões, menus, textos, etc.

Page 6: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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

Page 7: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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).

Page 8: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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

}

}

Page 9: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

}

}

Page 10: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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”);

Page 11: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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.

Page 12: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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.

Page 13: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

}

}

Page 14: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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: ”);

Page 15: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

PrimeiraTelaSwing + JLabelimport 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();

}

}

Page 16: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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);

Page 17: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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);

Page 18: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

}

}

Page 19: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

Dúvidas

Page 20: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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.

Page 21: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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");

Page 22: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

}

}

Page 23: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

TesteDaTelaDeCadastroDePessoa

package com.javabasico.swing;

public class TesteDaTelaDeCadastroDePessoa {

public static void main(String[] args) {

new TelaDeCadastroDePessoa();

}

}

Page 24: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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

Page 25: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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");

Page 26: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

}

}

Page 27: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

TesteDaTelaDeCadastroDeAeronave

package com.javabasico.swing;

public class TesteDaTelaDeCadastroDeAeronave {

public static void main(String[] args) {

new TelaDeCadastroDeAeronave();

}

}

Page 28: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

Exercícios

Crie uma tela para cadastro de médico com os atributos nome, especialidade (Combo), número do crm.

Page 29: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

Page 30: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

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();

}

}

Page 31: Java Básico Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005

TesteDaTelaDeCadastroDeMedico

package com.javabasico.swing;

public class TesteDaTelaDeCadastroDeMedico {

public static void main(String[] args) {

new TelaDeCadastroDeMedico();

}

}