exemplo de aplicação desktop com netbeans

15
5/28/2018 ExemplodeaplicaoDesktopcomNetbeans-slidepdf.com http://slidepdf.com/reader/full/exemplo-de-aplicacao-desktop-com-netbeans 1/15 Exemplo de aplicação Desktop com Netbeans É verdade que a maioria das aplicações atuais são web based . Esse tipo de aplicação vem substintuindo as aplicações desktop, pois tem diversas vantagens como facilidade de atualização, público alvo mais fácil de ser atingido, compatibilidade com qualquer sistema operacional que possua um browser e diversas outras. Entratanto, as aplicações desktop ainda têm seu espaço no mercado. Por exemplo, aplicações PDV (Ponto de Venda) geralmente são feitas para rodar como uma aplicação desktop principalmente pela necessidade de tempo de resposta curto. Outro exemplo que pode ser citado é a aplicação do governo para declaração de imposto de renda. A versão atual dessa aplicação é desktop. Nesse tutorial será apresentado como desenvolver uma aplicação desktop em java utilizando os componentes swing através do IDE Netbeans. Para evitar a complexidade de integração com banco de dados e nao sair do escopo, essa aplicação persiste os objetos em uma estrutura de dados ( Collection) declarada como static  em uma classe que “simula” um banco de dados.   Além disso, serão utilizados os componentes JInternalFrame em conjunto com o componente JDesktopPane que permitem que janelas sejam instanciadas em uma “área de trabalho” interna da aplicação. Sem a utilização desses componentes (utilizando apenas JFrame) as janelas ficam “soltas” como um programa independente.   A aplicação completa pode ser baixada no link apresentado ao final do artigo. Ferramentas necessárias Para a criação da aplicação é utilizado o IDE Netbeans 7.3 para linux ( https://netbeans.org/) com JDK 1.7 (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html ). Entretanto, nada impede que seja utilizado Windows. O projeto Como exemplo, vamos utilizar um projeto fictício de um banco. O diagrama de classes do projeto a ser criado é demonstrado através da Figura 1 . Não vamos demonstrar a criação do projeto por completo, pois as atividades acabam se tornando muito repetitivas. Figura 1 – Diagrama de classes projeto banco Criar projeto Para iniciar a criação do projeto basta abrir o Netbeans e acessar a opção File / New Project, selecionar a opção Java / Java Application e clicar sobre o botão Next. Após isso, uma janela é exibida na qual deve ser digitado o “Banco” no campo  Project Name  e o diretório onde se deseja salvar ( Project Location ). Outra opção interessante nessa janela é a possibilidade de criar uma classe principal. Entretanto, como não queremos criar uma classe principal, vamos desmarcar a opção Create Main Class. A janela para criação do projeto é exibida na Figura 2.

Upload: carlos-machado

Post on 18-Oct-2015

141 views

Category:

Documents


1 download

TRANSCRIPT

Exemplo de aplicao Desktop com Netbeans

verdade que a maioria das aplicaes atuais soweb based. Esse tipo de aplicao vem substintuindo as aplicaes desktop, pois tem diversas vantagens como facilidade de atualizao, pblico alvo mais fcil de ser atingido, compatibilidade com qualquer sistema operacional que possua um browser e diversas outras.Entratanto, as aplicaes desktop ainda tm seu espao no mercado. Por exemplo, aplicaes PDV (Ponto de Venda) geralmente so feitas para rodar como uma aplicao desktop principalmente pela necessidade de tempo de resposta curto. Outro exemplo que pode ser citado a aplicao do governo para declarao de imposto de renda. A verso atual dessa aplicao desktop.Nesse tutorial ser apresentado como desenvolver uma aplicao desktop em java utilizando os componentes swing atravs do IDE Netbeans. Para evitar a complexidade de integrao com banco de dados e nao sair do escopo, essa aplicao persiste os objetos em uma estrutura de dados (Collection) declarada comostaticem uma classe que simula um banco de dados.Alm disso, sero utilizados os componentesJInternalFrameem conjunto com o componenteJDesktopPaneque permitem que janelas sejam instanciadas em uma rea de trabalho interna da aplicao. Sem a utilizao desses componentes (utilizando apenas JFrame) as janelas ficam soltas como um programa independente.A aplicao completa pode ser baixada no link apresentado ao final do artigo.Ferramentas necessriasPara a criao da aplicao utilizado o IDE Netbeans 7.3 para linux (https://netbeans.org/) com JDK 1.7 (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html). Entretanto, nada impede que seja utilizado Windows.O projetoComo exemplo, vamos utilizar um projeto fictcio de um banco. O diagrama de classes do projeto a ser criado demonstrado atravs daFigura 1. No vamos demonstrar a criao do projeto por completo, pois as atividades acabam se tornando muito repetitivas.

Figura 1 Diagrama de classes projeto bancoCriar projetoPara iniciar a criao do projeto basta abrir o Netbeans e acessar a opoFile / New Project, selecionar a opoJava / Java Applicatione clicar sobre o botoNext. Aps isso, uma janela exibida na qual deve ser digitado o Banco no campoProject Name e o diretrio onde se deseja salvar (Project Location). Outra opo interessante nessa janela a possibilidade de criar uma classe principal. Entretanto, como no queremos criar uma classe principal, vamos desmarcar a opoCreate Main Class. A janela para criao do projeto exibida naFigura 2.

Figura 2 Criar projeto BancoAps a criao do projeto, vamos criar os pacotesbr.com.banco.model,br.com.banco.viewebr.com.banco.util. Para criar um pacote, clique com o boto direito sobreSource Packagese selecione a opoNew / Java Package. No pacote model ficaro as classes da parte do modelo da aplicao, ou seja, exatamente as classes demonstradas naFigura 1. Em view ficaro as telas do sistema e em util algumas classes que iro ajudar em tarefas como converso de datas.Dessa forma, a estrutura da aplicao foi definida. Obviamente, existem estruturas mais completas e complexas que essa. Entretanto, a finalidade do tutorial no discutir sobre arquitetura e sim apresentar uma aplicao desktop bsica.Criar classes de domnioAs primeiras classes a serem criadas so as de domnio. Essas classes so chamadas assim, pois representam o domnio da aplicao, no caso o domnio bancrio. Vamos comear criando a classe Banco. Para isso, clique com o boto direito sobre o pacote br.com.banco.model e selecione a opoNew / JavaClass, digite o nome da classe emClass Namee selecione a opoFinish. A seguir apresentado o cdigo referente classe Banco. Note que o atributoprivate Collection agencias;representa o relacionamento entre a classe Banco e a classe Agencia.?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package br.com.banco.model;import java.util.Collection;public class Banco {private Integer id;private Integer codigo;private String nome;private String CNPJ;private Collection agencias;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getCodigo() {return codigo;}public void setCodigo(Integer codigo) {this.codigo = codigo;}public String getNome() {return nome;}public void setNome(String nome) {this.nome = nome;}public String getCNPJ() {return CNPJ;}public void setCNPJ(String CNPJ) {this.CNPJ = CNPJ;}public Collection getAgencias() {return agencias;}public void setAgencias(Collection agencias) {this.agencias = agencias;}}

Assim como foi criado a classe Banco, as outras classes podem ser criadas observando os atributos e relacionamentos do diagrama de classes apresentado naFigura 1.Criar estrutura de dados para simular BDComo mencionado anteriormente, nesse exemplo no ser utilizado banco de dados para persistir os objetos. Entretanto, ser utilizado uma estrutura de dados com a finalidade de simular um banco de dados. Essa estrutura de dados simplesmente umaCollectionque ser criada como uma atributo de classe (static) em uma classe denominadaBd.O procedimento para criao da classeBd semelhante ao procedimento de criao das outras classes. Entretanto, essa classe deve ser criada dentro do pacotebr.com.banco.util.Aps criar a classeBd, o seu contedo deve ser definido como demonstrado a seguir.?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162package br.com.banco.util;import br.com.banco.model.Cidade;import br.com.banco.model.ContaCorrente;import br.com.banco.model.Endereco;import br.com.banco.model.Estado;import br.com.banco.model.Poupanca;import br.edu.faa.labii.banco.Agencia;import br.edu.faa.labii.banco.Banco;import br.edu.faa.labii.banco.Cliente;import java.util.ArrayList;import java.util.Collection;public class Bd {private static Collection clientesBD;private static Collection bancosBD;private static Collection agenciasBD;private static Collection cidadesBD;private static Collection contasCorrenteBD;private static Collection enderecosBD;private static Collection estadosBD;private static Collection poupancasBD;private static Integer nextIdAgencia = 0;private static Integer nextIdBanco = 0;private static Integer nextIdCidade = 0;private static Integer nextIdCliente = 0;private static Integer nextIdContaCorrente = 0;private static Integer nextIdEndereco = 0;private static Integer nextIdEstado = 0;private static Integer nextIdPoupanca = 0;public static Integer getNextIdCliente(){nextIdCliente += 1;return nextIdCliente;}public static Integer getNextIdBanco(){nextIdBanco += 1;return nextIdBanco;}public static Integer getNextIdAgencia(){nextIdAgencia += 1;return nextIdAgencia;}public static Integer getNextIdCidade(){nextIdCidade += 1;return nextIdCidade;}public static Integer getNextIdContaCorre(){nextIdContaCorrente += 1;return nextIdContaCorrente;}public static Integer getNextIdEndereco(){nextIdEndereco += 1;return nextIdEndereco;}public static Integer getNextIdEstado(){nextIdEstado += 1;return nextIdEstado;}public static Integer getNextIdPoupanca(){nextIdPoupanca += 1;return nextIdPoupanca;}public static Collection getClientesBD() {if (clientesBD == null){return clientesBD = new ArrayList();}return clientesBD;}public static void setClientesBD(Collection aClientesBD) {clientesBD = aClientesBD;}public static Collection getAgenciasBD() {if (agenciasBD == null){return agenciasBD = new ArrayList();}return agenciasBD;}public static void setAgenciasBD(Collection aAgenciasBD) {agenciasBD = aAgenciasBD;}public static Collection getBancosBD() {if (bancosBD == null){bancosBD = new ArrayList();}return bancosBD;}public static void setBancosBD(Collection aBancosBD) {bancosBD = aBancosBD;}public static Collection getCidadesBD() {if (cidadesBD == null){cidadesBD = new ArrayList();}return cidadesBD;}public static void setCidadesBD(Collection aCidadesBD) {cidadesBD = aCidadesBD;}public static Collection getContasCorrenteBD() {if (contasCorrenteBD == null){contasCorrenteBD = new ArrayList();}return contasCorrenteBD;}public static void setContasCorrenteBD(Collection aContasCorrenteBD) {contasCorrenteBD = aContasCorrenteBD;}public static Collection getEnderecosBD() {if (enderecosBD == null){enderecosBD = new ArrayList();}return enderecosBD;}public static void setEnderecosBD(Collection aEnderecosBD) {enderecosBD = aEnderecosBD;}public static Collection getEstadosBD() {if (estadosBD == null){estadosBD = new ArrayList();}return estadosBD;}public static void setEstadosBD(Collection aEstadosBD) {estadosBD = aEstadosBD;}public static Collection getPoupancasBD() {if (poupancasBD == null){poupancasBD = new ArrayList();}return poupancasBD;}public static void setPoupancasBD(Collection aPoupancasBD) {poupancasBD = aPoupancasBD;}}

Note que cada um dos atributos da classeBd umaCollectionque vai ser responsvel por armazenar uma classe de domnio. importante observar tambm que os mtodosgetsforam alterados. Antes de retornar o objeto verificado se est nulo, caso esteja ele inicializado como umArrayList.Alm disso, a classeBdtambm apresenta atributos referntes aoidde cada classe de domnio. Essesidsserviro, por exemplo, para saber qual objeto foi selecionado em umJTable. O atributoidde cada objeto desse sistema autoincremento, pois sempre recebe o valor do mtodogetNextIdque retorna o prximoiddisponvel.Alm da classeBd, a classeUtiltambm deve ser criada no pacotebr.com.banco.util. O Cdigo dessa classe demonstrado a seguir.?12345678910111213141516171819202122232425262728293031package br.com.banco.util;import java.awt.Color;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.logging.Level;import java.util.logging.Logger;public class Util {public static Color cor;public static String dateToStr(Date data, String formato){SimpleDateFormat sdf = new SimpleDateFormat(formato);return sdf.format(data);}public static Date strToDate(String date, String formato){SimpleDateFormat sdf = new SimpleDateFormat(formato);try {return sdf.parse(date);} catch (ParseException ex) {Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);}return null;}}

Criar janela principalA janela principal do sistema ser umJFramee, assim como as outras janelas do sistema, deve ficar no pacotebr.com.banco.view. Para cri-la clique com o boto direito sobre o pacotebr.com.banco.viewe selecione a opoNew / Other. Na janela que abrir selecioneSwing GUI Formse depoisJFrame Form. Clique emNext, digiteJFPrincipalemClass Namee selecione a opoFinish.Assim, o Netbeans mostra a janela criada possibilitando editar suas propriedades e tambm inserir componentes.Pode se observar que na parte direita da tela um conjunto de componentes exibido. Esses componentes podem ser arrastados at a tela criada como mostra aFigura 3.

Figura 3 Paleta de componentes SwingNossa tela ser composta pelos componentesJMenuBar,JPanel,JLabeleJDesktopPane.O componenteJMenuBarrepresenta o menu tradicional de aplicaes. atravs desse menu que as outras telas da aplicao sero chamadas. OJPanel apenas um container para organizar melhor os componentes na janela. Dentro doJPanelser inserido umJLabel. Esse componente serve para escrever um texto qualquer: um label. Alm desses componentes, deve ser inserido umJDesktopPaneque ir ocupar maior parte da janela. Esse componente tambm um container que permite que outras janelas sejam instanciadas em seu interior. Ou seja, as janelas para listagens e cadastros do sistemas sero todas instanciadas dentro doJInternalFrame. Isso d uma roupagem bastante profissional aplicao no deixando as janelas soltas como sistemas separados.AFigura 4demonstra como deve ficar a tela principal.

Figura 4 Tela PrincialComo adicionamos umJMenuBar, precisamos adicionar Itens a este menu. A edio desse componente totalmente visual. Para criar um item de menu basta clicar com o boto direito sobre o componente e selecionar a opoAdd menu. Depois, com um duplo clique sobre o menu criado possvel renome-lo.Para adicionar um item ao menu criado, clique com o boto direito sobre ele e em seguida selecione a opoAdd fromPalette / Menu Item. Para renomear o Item de menu criado clique com o boto direito e selecione a opoEdit Text.Alm disso, possvel definir tambm atalhos de acesso esses menus. Para isso, clique duas vezes sobreshortcut,na janela que se abrir posicione o mouse sobre o campoKey Strokee em seguida aperte o atalho que deseja para o menu como se estivesse querendo acess-lo. O Netbeans vai detectar as teclas que voc est pressionando e ir gerar o atalho automaticamente. Depois, basta pressionar o botoOk.

Criar janela de listagemComo exemplo de aplicao ser demonstrado a criao do CRUD de clientes iniciando pela janela de listagem de clientes.A janela de listagem, assim como todas as outras janelas dessa aplicao sero do tipoJInternalFrame. Esse tipo de componente pode ser instanciado dentro de umJDesktopPane.Portanto, clique com o boto direito sobre o pacotebr.com.banco.viewe selecione a opoNew / Other, na janela que se abrir selecione a opoSwing GUI Forms / JinternalFrameForm, clique emNext, digiteJIFListarClienteemClass Namee clique emFinish.Aps isso, a janela exibida e possvel adicionar os componentes. Essa janela tambm ter umJPanele umJLabelque daro ttulo janela. Um componente do tipoJTabledeve ser adicionado, esse componente deve ocupar a maior parte da janela. Alm disso, na parte inferior devem ser adicionados quatroJButtonsque ficaro dentro de umJPanelpara que a janela fique melhor organizada.AFigura 5demonstra como essa janela criada.

Figura 5 Tela Listagem de ClientesUm detalhe na janela de listagem de clientes que as colunas doJTableesto customizadas, ou seja, esto mostrando exatamente os atributos da classe cliente. Para customizar oJTableclique com o boto direito sobre ele e selecione a opoTable Contents, selecione a abaColumnse inclua as colunas necessrias. Note tambm que a colunaidno exibida para o usurio. Isso porque ela est redimensionada com largura 0 (zero). AFigura 6mostra a configurao das colunas da tabela.Alm das colunas tambm possvel configurar as linhas da tabela. Em nossa aplicao todas as linhas devem ser apagas para a tabela iniciar vazia.

Figura 6 Tela edio do JTable

Instanciar janela de listagemAgora que a janela de listagem de clientes j est criada, possvel cham-la atravs do menu criado anteriormente. Para isso, noJFPrincipalde um duplo clique no menu referente listagem de clientes. Ao clicar duas vezes sobre o menu, o Netbeans automaticamente cria o mtodo que ser executado quando o usurio clicar sobre esse menu. O cdigo a seguir deve ser digitado no mtodo.?12345private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {JIFListarCliente jIFListarCliente = new JIFListarCliente(jDPPrincipal);jDPPrincipal.add(jIFListarCliente);jIFListarCliente.show();}

O que o cdigo anterior faz instanciar a janela de listagem de clientes, adiciona essa janela noJDesktopPanee depois mostra a janela atravs do mtodoshow().Repare que o construtor utilizado para instanciar a janela de listagem no o construtor padro. Esse construtor recebe como parmetro oJDesktopPane. Isso tem que ser feito porque a janela de Cadastro ser instanciada a partir da janela de Listagem e no da janela Principal. Assim, passando oJDesktopPanecomo parmetro para janela de listagem, ela pode enxergar esse componente e adicionar a janela de Cadastro. Em outras palavras, a janela de Listagem nao teria acesso aoJDesktopPane, pois esse est na janela Principal.Contudo, o mtodo construtor da janela de listagem bem como o atributo que ir armazenar oJDesktopPaneso demonstrado a seguir.?123456private JDesktopPane jDPPrincipal;public JIFListarCliente(JDesktopPane jDPPrincipal) {initComponents();this.jDPPrincipal = jDPPrincipal;}

Criar janela de manuteno de clientesA janela de manuteno aquela que possui os campos referentes ao cadastro de clientes e permite aos usurios incluir novos clientes ou alterar clientes j existentes. Para criar a janela de manuteno de clientes clique com o boto direito sobre o pacotebr.com.banco.viewe selecione a opoNew / JInternalFrame Form.Renomeie a janela paraJIFManterClientee clique emFinish.Aps criar a tela possvel adicionar os componentes. AFigura 7demonstra como a tela deve ficar.Um detalhe importante que para os campos que possuemmscara(data e CNPJ) foram utilizados componente do tipoJFormattedTexte noJText.Os componentes do tipoJFormattedTextpermitem a definio de uma mscara atravs da propriedadeFormatterFactory.

Figura 7 Tela de Manuteno de Clientes