Você está na página 1de 13

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

GUJ

Notcias, artigos e o maior frum brasileiro sobre Java


home frum notcias tpicos recentes empregos artigos

Bem vindo ao GUJ. Crie seu login, ou digite-o para logar no site. Usurio: Senha:

Introduo a programao grfica em Java com Swing


em 28/04/2003 , por Rafael Steil Introduo a programao grfica em Java com Swing Neste artigo vamos ver como criar aplicaes grficas em Java, mais precisamente usando um Framework ( conjunto de classes ) chamado Swing. Veremos trs exemplos, comeando com um simples programa que apenas escreve uma mensagem na tela, passando para um programa que j trabalha com caixas de texto e botes, e por final veremos como trabalhar com listas. H ainda uma seo especialmente sobre gerenciamento de layout, os chamados "Layout Managers", item muito importante quanto se trata de programao GUI. No necessrio que voc tenha alguma experincia anterior em programao grfica com Java, porm um minimo de conhecimento da tecnologia ajudaria, apesar de no ser imprensindvel, uma vez que bastante comum as pessoas terem o primeiro contato com Java atravs de programao grfica. Conhecimentos de lgica de programao so necessrios, mesmo que seja apenas uma base. Para digitar os programas voc pode usar qualquer editor de textos ou cdigo de sua preferncia, tais como Notedad, UltraEdit, VI, Emacs, KWrite e assim por diante. Programas em Java necessitam do JDK para serem desenvolvidos e, uma vez compilados, apenas a JRE faz-se ncessrio. O JDK, por j ser um ambiente completo de desenvolvimento, j trs uma verso da JRE, portanto voc no precisa ter os dois pacotes instalados na mesma mquina. Se voc nunca mexeu com Java ou no tem ( ou no sabe como instalar ) o JDK, d uma lida nos tutoriais "Instalando e configurando o JDK no Linux" ( ou "Instalando e configurando o JDK no Windows" caso seja usurio de Windows ), " Classpath, entendendo o que e para que serve", "Sopa de letrinhas sabor Java" e "Os erros e dvidas de um iniciante", disponveis no site do GUJ seo "Artigos" e "Tutoriais". Conhecendo o Swing Nas primeiras verses do Java a nica forma de fazer programas grficos era atravs da AWT, uma biblioteca de baixo-nvel que dependia de cdigo nativo da plataforma onde rodava. Ela traz alguns problemas de compatibilidade entre as plataformas, fazendo que nem sempre o programa tinha aparncia desejada em todos os sistemas operacionais, sendo tambm mais difcil de ser usada. Para suprir as necessidades cada vez mais freqentes de uma API mais estvel e fcil de usar, o Swing foi criado como uma extenso do Java a partir da verso 1.2. Swing fornece componentes de mais alto nvel, possibilitando assim uma melhor compatibilidade

1 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

entre os vrios sistemas onde Java roda. Ao contrrio da AWT, Swing no contm uma nica linha de cdigo nativo, e permite que as aplicaes tenham diferentes tipos de visuais ( skins ), os chamados "Look and Feel". J com AWT isso no possvel, tendo todos os programas a aparncia da plataforma onde esto rodando. Apesar da AWT ainda estar disponvel no Java, altamente recomendvel que sejam usado Swing, pelas razes descritas aqui e por vrias outras. Componentes Swing contm um "J" na frente, como em JButton por exemplo. Componentes AWT no contm inicial alguma ( "Button" no caso ). Alm disso tudo, as vantagens do Swing no param por ai. H uma enorme gama de controles extras disponveis, tais como reas de texto que nativamente podem mostrar contedo RTF ou HTML, botes com suporte a imagens, sliders, selecionadores de cores etc. tambm possvel alterar o tipo de borda para a maior parte dos componentes, todos podem ter imagens associadas e possvel at ter controle de como so desenhados os mnimos detalhes de apresentao. Comeando O cdigo completo do programa, que no grande, vai ser mostrado completo primeiramente, para depois ento analizarmos cada instruo dele. Digite o seguinte cdigo em um arquivo chamado "SwingExemplo1.java". Note que muito importante ficar atendo em relao maisculas e minsculas, o Java nota a diferena entre tais caracteres. view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;

public class SwingExemplo1 extends JFrame { JPanel panel; JLabel msg; public SwingExemplo1() { super("Java!"); } public void criaJanela() { panel = new JPanel(); msg = new JLabel("GUJ.com.br"); panel.add(msg); getContentPane().add(panel, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { SwingExemplo1 s = new SwingExemplo1(); s.criaJanela(); } }

No se assuste e muito menos no se intimide com o cdigo, o qual pode parecer um pouco complicado no incio. medida que voc vai pegando experincia em programao Java, as nomemclaturas e nomes de classes

2 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

e mtodos vo se tornando comuns, ficando fcil de lembrar. Vamos ver agora as partes mais importantes do programa e o que cada uma delas fazem. Primeiramente temos as declaraes que importam as bibliotecas necessrias para o nosso programa: view plainprint? 1. 2. 3. 4. 5. import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;

Estas linhas so muito importantes, pois caso alguma falte ou esteja errada, o programa no ir nem compilar. Os nomes podem parecer estranhos, mas tudo tem um padro bem definido e fcil de ser lembrado. Por exemplo, o nome "javax.swing.JLabel" diz que estamos requisitando a classe "JLabel", que faz parte do pacote de utilidades grficas "swing", o qual pertence ao pacote "javax". Seguindo temos a declarao da classe em si, na linha view plainprint? 1. public class SwingExemplo1 extends JFrame . Isso diz que o nome do nosso programa ser "SwingExemplo1", e que ele deve j herdar por padro tudo o que a classe "JFrame" disponibiliza. Em view plainprint? 1. JPanel panel; 2. JLabel msg; temos a declarao de 2 variveis que representam o painel onde ficaro os componentes e uma label de texto, respectivamente. A prxima instruo, view plainprint? 1. public SwingExemplo1() 2. { 3. super("Java!"); 4. } tem o mesmo nome do nosso programa, e chamada de "construtor". Dentro dele chamamos um mtodo da classe pai - JFrame - a qual herdamos. Esta linha configura o ttulo da janela para "Java!". Em seguida criamos um mtodo chamado "criaJanela", o qual usaremos para criar os componentes e mostrar a nossa aplicao. Dentro deste mtodo ( para quem no sabe, um mtodo nada mais do que uma funo normal, porm pertencente a uma determinada classe ) que fazemos todo o "trabalho sujo". Primeiramente criamos um painel para acomodar os componentes e por fim criado um label de texto contendo a frase "GUJ.com.br". Tudo isso pode feito nas linhas view plainprint? 1. panel = new JPanel(); 2. msg = new JLabel("GUJ.com.br"); A linha view plainprint? 1. panel.add(msg); executa a tarefa de adicionar o nosso componente de texto ao painel. Um programa grfico em Java pode conter 3 tipos diferentes de janela: Um JFrame, o qual usamos em nosso exemplo, para representar a janela "principal"

3 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

da aplicao, um JDialog para representar uma janela de dilogo (uma janela secundria, como uma janela de formatao de fonte do texto, por exemplo ), e, por ltimo, um JApplet para ser usado em Browsers. Importante: voc no precisa saber essas coisas decoradas! O java possui um poderosssimo sistema de documentao, e voc tem acesso a isto em http://java.sun.com/j2se/1.4/docs/api/index.html. Por fim, neste mtodo, as linhas view plainprint? 1. 2. 3. 4. 5. getContentPane().add(panel, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true);

Dizem ao Java que queremos os componentes centralizados na tela, que ao clicar no "xizinho" da janela para terminar o programa, faz com que a janela seja redimensionada de maneira a acomodar corretamente os componentes nela contidos, e, por ltimo mas no menos importante, fazemos a janela ser mostrada, respectivamente. Salve o arquivo com o nome SwingExemplo1.java ( no esquea das maisculas e minsculas ) e depois compile: view plainprint? 1. javac SwingExemplo1.java e execute-o: view plainprint? 1. java SwingExemplo1 Se tudo ocorrer perfeitamente, voc ir ver uma pequena janela com o ttulo "Java!" e escrito 'GUJ.com.br" no meio dela. Gerenciamento de layout Gerenciamento de layout ( Layout Management ) o processo de determinar o tamanho e a posio dos componentes na janela grfica do programa. ele o responsvel por determinar onde o componente ir ficar, como ir ficar, qual o comportamento a ser tomado na hora de redimensionar a tela. Por padro o Java vem com cinco gerenciadores de layout: BorderLayout, BoxLayout, FlowLayout, GridBagLayout, GridLayout e um adicional chamado CardLayout. So os gerenciadores de layout que determinam como os componentes iro ficar em seu programa, portanto um bom conhecimento sobre o funcionamento dos mesmos faz-se necessrio para ter domnio de programao grfica em Java. Geralmente, quando chamamos o mtodo "add" para adicionar um componente na tela, ele ser posicionado de acordo com o gerenciador de layout previamente configurado. A maior parte simplemente vai adicionando os componentes com base na ordem em que foram programados, porm alguns outros, como o BorderLayout, necessitam que voc informe a posio relativa no container. A escolha do gerenciador de layout depende muito das necessidades do programa. Por padro todos objetos JPanel so configurados para usar o FlowLayout, enquanto um JFrame e JDialog j usam o BorderLayout como padro. Em ambos os casos usado o mtodo "setLayout" para especificar um novo layout manager, sendo necessrio passar para este mtodo o tipo que desejamos. Abaixo h um exemplo para cada tipo de gerenciador de layout, ficando assim fcil para vermos como cada um se comporta. O programa BorderLayoutTest.java O primeiro exemplo mostra como um BorderLayout funciona. Digite o seguinte cdigo e salve como "BorderLayoutTest.java": view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. import javax.swing.*; import java.awt.*; public class BorderLayoutTest extends JFrame { public BorderLayoutTest() { JButton botao1 = new JButton("Boto 1");

4 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. }

JButton botao2 = new JButton("Boto 2"); JButton botao3 = new JButton("Boto 3"); JButton botao4 = new JButton("Boto 4"); JButton botao5 = new JButton("Boto 5"); // Como o padrao de um JFrame o // BorderLayout, simplesmente adicionamos // os componentes na tela getContentPane().add(botao1, BorderLayout.NORTH); getContentPane().add(botao2, BorderLayout.CENTER); getContentPane().add(botao3, BorderLayout.WEST); getContentPane().add(botao4, BorderLayout.SOUTH); getContentPane().add(botao5, BorderLayout.EAST); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new BorderLayoutTest(); }

Compile usando view plainprint? 1. javac BorderLayoutTest.java e execute com o comando view plainprint? 1. java BorderLayoutTest Usando BoxLayout Um BoxLayout coloca os componentes em uma nica linha ou coluna, permitindo ainda que voc especifique o alinhamento deles. Digite o seguinte programa e salve em um arquivo chamado "BoxLayoutTest.java": view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. import java.awt.*; import javax.swing.*; public class BoxLayoutTest extends JFrame { public BoxLayoutTest() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); JButton botao1 = new JButton("Boto 1"); JButton botao2 = new JButton("Boto 2"); JButton botao3 = new JButton("Boto 3"); JButton botao4 = new JButton("Boto 4"); JButton botao5 = new JButton("Boto 5");

5 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. }

panel.add(botao1); panel.add(botao2); panel.add(botao3); panel.add(botao4); panel.add(botao5); getContentPane().add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new BoxLayoutTest(); }

Usando FlowLayout Como dito anteriormente, um FlowLayout o gerenciador padro de todo JPanel, caso no seja especificado outro. FlowLayout posiciona os componentes lado-a-lado, e em termos seria a mesma coisa que usar um Boxlayout com a propriedade X_AXIS setada ( no nosso exemplo anterior usamos Y_AXIS ). O seguinte programa, "FlowLayoutTest.java", demostra isso: view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. import javax.swing.*; import java.awt.*; public class FlowLayoutTest extends JFrame { public FlowLayoutTest() { JPanel panel = new JPanel(); JButton botao1 = new JButton("Boto 1"); JButton botao2 = new JButton("Boto 2"); JButton botao3 = new JButton("Boto 3"); JButton botao4 = new JButton("Boto 4"); JButton botao5 = new JButton("Boto 5"); panel.add(botao1); panel.add(botao2); panel.add(botao3); panel.add(botao4); panel.add(botao5); getContentPane().add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[])

6 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

31. { 32. new FlowLayoutTest(); 33. } 34. } Usando GridLayout Um GridLayout atua como uma grade de uma planilha de clculo, colocando os componentes em linhas e colunas pr-determinadas e deixando os componentes com o mesmo tamanho. Veja isso no programa "GridLayoutTest.java": view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. import javax.swing.*; import java.awt.*; public class GridLayoutTest extends JFrame { public GridLayoutTest() { // 3 linhas, 2 colunas getContentPane().setLayout(new GridLayout(3, 2)); JButton botao1 = new JButton("Boto 1"); JButton botao2 = new JButton("Boto 2"); JButton botao3 = new JButton("Boto 3"); JButton botao4 = new JButton("Boto 4"); JButton botao5 = new JButton("Boto 5"); getContentPane().add(botao1); getContentPane().add(botao2); getContentPane().add(botao3); getContentPane().add(botao4); getContentPane().add(botao5); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new GridLayoutTest(); } }

Usando GridBabLayout O mais flexvel gerenciador de layout o GridBagLayout. Ele permite colocar componentes em grades de colunas, sendo possve um componente ocupar mais de uma coluna ao mesmo tempo. As linhas tambm no precisam necessariamente ter os mesmos tamanhos, ou seja, voc pode configurar diferentes larguras e alturas de acordo com a necessidade. Eis o programa "GridBaglayoutTest.java": view plainprint? 1. import javax.swing.*; 2. import java.awt.*; 3. 4. public class GridBagLayoutTest extends JFrame

7 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

5. { 6. public GridBagLayoutTest() 7. { 8. GridBagLayout layout = new GridBagLayout(); 9. GridBagConstraints c = new GridBagConstraints(); 10. 11. getContentPane().setLayout(layout); 12. 13. JButton botao1 = new JButton("Boto 1"); 14. JButton botao2 = new JButton("Boto 2"); 15. JButton botao3 = new JButton("Boto 3"); 16. JButton botao4 = new JButton("Boto 4"); 17. JButton botao5 = new JButton("Boto 5"); 18. 19. // Configura as proridades de cada botao 20. // Botao 1 21. c.gridy = 0; // primeira linha 22. c.gridx = 0; // primeira coluna 23. layout.setConstraints(botao1, c); 24. getContentPane().add(botao1); 25. 26. // Botao 2 27. c.gridy = 0; // primeira linha c.gridx = 1; // segunda coluna 28. 29. layout.setConstraints(botao2, c); 30. getContentPane().add(botao2); 31. 32. // Botao 3 33. c.gridy = 0; // primeira linha 34. c.gridx = 2; // terceira coluna 35. layout.setConstraints(botao3, c); 36. getContentPane().add(botao3); 37. 38. // Botao 4 39. c.gridy = 1; // segunda linha 40. c.gridx = 0; // primeira coluna c.gridwidth = 3; // Ocupar o espao de 3 colunas 41. 42. layout.setConstraints(botao4, c); 43. getContentPane().add(botao4); 44. 45. // Botao 5 46. c.gridy = 2; // terceira linha c.gridx = 1; 47. 48. c.gridwidth = 2; 49. layout.setConstraints(botao5, c); 50. getContentPane().add(botao5); 51. 52. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 53. pack(); 54. setVisible(true); 55. } 56. 57. public static void main(String args[]) 58. { 59. new GridBagLayoutTest(); 60. } 61. }

8 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

Logicamente possvel fazer muito mais com os gerenciadores de layout, h vrias maneiras de configurar e utilizar. Para obter mais informaes sobre so mtodos disponveis para cada um consulte a API, disponvel em http://java.sun.com/j2se/1.4.1/docs/api/index.html Mitos sobre programao grfica com Java Existem muitos mitos sobre Java, uns so verdadeiros, outros, devido ao amadurecimento da tecnologia, no so mais, e h ainda os mitos puramente existentes para falar mal. Um dos maiores e mais comentados at hoje "o Java lento". No, o Java no lento, pelo menos no mais, como antigamente. Pelo fato do Java ter um cdigo intermedirio, indepentende de plataforma e sistema operacional, o sistema de carregamento um pouco diferente de programas dependentes de plataforma, como Delphi, C e VB. Atualmente tecnologias como HotSpot e compiladores JIT ( Just-In-Time ) fazem que programas em Java rodem de maneira extremamente satisfatria, muitas vezes comparando-se com programas compilados nativamente. Programas em Java tendem a necessitar de mais memria, mas isso no chega a ser um impecilho nos dias de hoje, visto que peas de hardware como memria RAM esto extremamente baratos. Obviamente tentar rodar uma aplicao complexa em uma mquina antiga e pouca memria no ser muito agradvel, apesar de no ser impossvel. muito importante tem a consincia que a velocidade de um programa no depende apenas da tecnologia e compiladores, mas sim do programador tambm, pois um cdigo mal escrito s ajuda a piorar a performance. Um segundo exemplo Tendo tudo isso em mente, vamos ver um segundo exemplo de programa grfico, o qual faz uso de um boto e caixa para digitao de texto. Veremos tambm como manipular a ao de cliques do mouse. Abra seu editor de cdigos preferido e digite o seguinte programa: view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingExemplo2 extends JFrame implements ActionListener { JButton botao; JPanel panel; JTextField texto; public SwingExemplo2() { super("GUJ - Java"); } public void criaJanela() { texto = new JTextField("Digite algo..."); panel = new JPanel(); panel.setLayout(new GridLayout(2, 1)); botao = new JButton("Me clique"); botao.addActionListener(this); panel.add(texto); panel.add(botao); getContentPane().add(panel, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); }

9 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. }

public void actionPerformed(ActionEvent event) { botao.setText(texto.getText()); } public static void main(String args[]) { SwingExemplo2 ex2 = new SwingExemplo2(); ex2.criaJanela(); }

Salve este arquivo com o nome "SwingExemplo2.java" e compile como fizemos no primeiro exemplo. Ao executar com o comando view plainprint? 1. java SwingExemplo2 , dever aparecer uma telinha com o ttulo "GUJ - Java", um campo para digitao de texto e um botozinho escrito "Me clique". Ao clicar no boto o texto existente no campo de texto se tornar o ttulo do boto! Muito do cdigo que fizemod agora igual ou parecido com o do exemplo 1. As novidades marcantes so a palavra-chave "implements", em view plainprint? 1. public class SwingExemplo2 extends JFrame implements ActionListener que nos diz que, alm dos recursos de um JFrame, queremos ter disponvel o acesso aos recursos de um ActionListener, o qual usamos para processar os eventos de vrios componentes, como o boto no nosso caso. Anteriormente falamos que aplicaes grficas em Java trabalham muito com grades, e isso que fazemos na linha view plainprint? 1. panel.setLayout(new GridLayout(2, 1)); Aqui estamos dizendo que o nosso painel para ter o formato de 2 linhas e 1 coluna, como se fosse uma grade mesmo. A outra adio significativa o mtodo "actionPerformed", o qual se encarrega de processar eventos de componentes. Geralmente necessrio verificar qual componente esta requisitanto processamento no momento, mas como no nosso caso s queremos saber do boto, nao fazemos tal verificao. Isso pode ser visto na parte de cdigo view plainprint? 1. public void actionPerformed(ActionEvent event) 2. { 3. botao.setText(texto.getText()); 4. } O nome "public void actionPerformed(ActionEvent event)" no um nome aleatrio, mas sim um mtodo definido na interface "ActionListener", a qual requisitamos na declarao da classe. A chamada a view plainprint? 1. botao.setText(texto.getText()); muda o texto do boto para o contedo do nosso campo de texto. IDE's & RAD's

10 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

Se voc j tem experincia, ou ao menos j mexeu com alguma outra linguagem de programao que utilize nativamente ferramentas RAD como Delphi e Visual Basic, deve te notado que em nosso exemplo muita coisa deve ser feita no brao, como por exemplo a criao de janelas e posicionamento de componentes. Apesar de existirem ambientes puramente RAD para Java, como o Borland Jbuilder - encontrado no endereo http://www.borland.com/jbuilder - em Java bastante comum o programador ter um contato mais "baixo nvel" com o cdigo. Os mais atentos tambm devem ter notado que apesar do componente de texto ter ficado centralizado corretamente na tela, ns sequer ao menos especificamos as coordenadas x/y do mesmo. Em Java, o funcionamento dos componentes do programa depende muito de grades ( uma grade funciona como uma planilha, com linhas e colunas ) e posicionamento cardinas, como norte, sul e oeste, por exemplo. Pode parecer estranho e complicado, mas isso o que garante ao desenvolvedor que independentemente do sistema operacional que a aplicao for executada, o visual ser exatamente o mesmo em todos ambientes. Uma IDE extremamente poderosa e verstil existente o Eclipse ( http://www.eclipse.org ), produzido pela IBM. O Eclipse possui uma enorme quantidade de recursos, que vo desde auxiliadores para a criao de aplicaes, passando por recuros de auto-completar cdigo, mapeamento de classes e objetos relacionados, verificao de erros em tempo de edio, debugador integrado e muito mais. Apesar dele no ser um editor RAD por default, o seu sistema de plugins permite a adio de componentes para tal tarefa. O JBuilder, produzido pela Borland, um ambiente RAD por natureza, onde o visual grfico das aplicaes so criadas simplesmente com o arrastar e soltar do mouse, exatamente como no Delphi. Isso auxilia bastante o desenvolvimento, uma vez que j possvel ver em tempo de desenvolvimento como ir ficar a interface do programa. O JBuilder uma ferramenta paga, porm h uma verso grtis disponvel chamada "Personal", a qual dispe de bem menos componentes prontos, mas j ajuda quem esta comeando. Um exemplo mais avanado Nosso ltimo programa de exemplo ir mostrar um controle chamado JList, e dar uma viso melhor de como posicionar os elementos na tela O programa simples, consiste em um campo de texto, uma lista e um boto. view plainprint? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingExemplo3 extends JFrame implements ActionListener { JList lista; JButton botaoAdicionar; JTextField textField; JPanel listPanel; JPanel botaoPanel; JScrollPane scroll; DefaultListModel listModel; public SwingExemplo3() { super("GUJ - JList"); textField = new JTextField("Digite algo"); botaoAdicionar = new JButton("Adicionar"); listModel = new DefaultListModel(); listPanel = new JPanel(); botaoPanel = new JPanel();

// Adiciona um item inicial na lista listModel.addElement("Item 1"); listModel.addElement("Item 2"); listModel.addElement("Item 3"); // Configura a lista e adiciona ao painel lista = new JList(listModel);

11 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. }

lista.setVisibleRowCount(3); scroll = new JScrollPane(lista); listPanel.add(scroll); getContentPane().add(listPanel, BorderLayout.CENTER); // Adiciona o campo de texto e o botao ao painel botaoAdicionar.addActionListener(this); botaoPanel.add(textField); botaoPanel.add(botaoAdicionar); getContentPane().add(botaoPanel, BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Mostra a janela pack(); setVisible(true); } public void actionPerformed(ActionEvent event) { if (textField.getText() != "") { listModel.addElement(textField.getText()); getContentPane().invalidate(); getContentPane().validate(); } } public static void main(String args[]) { SwingExemplo3 s = new SwingExemplo3(); }

Salve em um arquivo chamado "SwingExemplo3.java", compile e rode. Neste exemplo temos 4 novos tipos de componentes: o JTextField, que um campo de texto simples de uma nica linha, um JList, que nada mais que um componente onde itens so disponibilizados para seleo, um JScrollPane, que serve para adicionar barras de rolagem a um determinado componente, e por ltimo temos o DefaultListModel, o qual usado em conjunto com o Jlist. Adicionar itens em um JList simples, basta usar o mtodo view plainprint? 1. addElement para adicionar um item ao final da lista ou view plainprint? 1. add para adicionar um item em uma posio especfica. A chamada ao mtodo view plainprint? 1. lista.setVisibleRowCount(3); diz ao Java que queremos deixar visveis apenas 3 itens da lista, e caso haja mais do que isso, para adicionar as

12 de 13

31/08/2011 16:24

GUJ - Introduo a programao grfica em Java com Swing

http://www.guj.com.br/articles/38

barras de rolagem. O mtodo view plainprint? 1. actionPerformed , view plainprint? 1. public void actionPerformed(ActionEvent event) 2. { 3. if (textField.getText() != "") { 4. listModel.addElement(textField.getText()); 5. getContentPane().invalidate(); 6. getContentPane().validate(); 7. } 8. } primeiramente verifica se o campo de texto no esta vazio, ento adiciona o texto na lista usado a chamada view plainprint? 1. listModel.addElement(textField.getText()); e por fim as duas ltimas linhas mandam que aplicao seja "redesenhada", para que os componentes notem que novos itens foram adicionados ao JList. Concluso Ao longo deste tutorial tivemos uma breve demostrao do funcionamento do Swing, o conjuto de classes disponibilizadas no Java para a criao de aplicaes grficas de alto nvel. Vimos tambm alguns componentes bsicos como JButtom e JTextField e aprendemos o funcionamento dos Layout Managers. Antes de mais nada, programar em Java, e em especial Swing, requer uma maneira de pensar um pouco diferente, o que pode ser um pouco estranho no incio, uma vez que precisamos estar "conectando" os componentes uns com os outros, escrevendo mtodos para processar os cliques de mouse e outras coisas relacionadas, os chamados Event e Action Listeners Porm, com o tempo isso tudo vai se firmando, e voc ver que programar em Java ao mesmo tempo prazeiroso e desafiador. No site do GUJ voc pode contar com a ajuda de vrias pessoas da comunidade Java brasileira no frum, dentre outras vrias coisas relacionadas a Java. At a prxima. Apoiado e desenvolvido por Caelum Cursos Java - GUJ: desde 2002 Conhea tambm AgendaTech, Tectura, Programador Poliglota e InfoQ Brasil

13 de 13

31/08/2011 16:24

Você também pode gostar