310 likes | 523 Views
Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005. Java Básico. JFC – Java Foundation Classes. Swing Look and feel Java 2D Drag and Drop. GUI – Graphical User Interface.
E N D
Criação de telas com Swing Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Novembro/2005 Java Básico
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(); } }
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(); } }