Paradigmas de Programação Criação e Utilização de Caixas de Selecção “CheckBox” ou caixa de selecção é um componente gráfico que permite que o utilizador a marque ou desmarque fornecendo assim, informação visual sobre o estado actual das opções seleccionadas. Utiliza-se sempre que a aplicação tem várias opções e o utilizador deve escolher uma ou mais dessas opções. Em swing este componente pertence à classe JCheckBox. Todas as vezes que uma checkbox é marcada ou desmarcada é executado o método itemStateChanged (ItemEvent e) que pertence ao interface ItemListener. 2009/2010 Tópicos das aulas Teórico Práticas Helena Leitão & Dulce Mota 1 Paradigmas de Programação Exemplo: Criar uma aplicação que apresente uma janela com caixas de selecção com nomes de cidades, em que o utilizador escolhe a cidade que pretende visitar. De acordo com a caixas de selecção seleccionada assim aparece uma imagem sugestiva da cidade escolhida. Quando a caixa de selecção é desactivada a imagem respectiva também o é. 2009/2010 Tópicos das aulas Teórico Práticas Helena Leitão & Dulce Mota 2 Paradigmas de Programação Código java : teremos como componentes gráficos uma etiqueta colocada a norte, um array de caixas de selecção com os nomes das cidades colocado no centro e um array de etiquetas com as imagens das cidades colocado no sul. Os ficheiros com as imagens das cidades encontram-se no directório imagens e o nome é dado pelo nome da cidade seguido da extensão .GIF (imagens\Paris.GIF) A seguir encontra-se um método main possível para a aplicação: public static void main(String [] args){ JFrame janela=new JanelaCheckBox("Uso de CheckBox"); janela.setSize(500,250); janela.setVisible(true); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } 2009/2010 Tópicos das aulas Teórico Práticas Helena Leitão & Dulce Mota 3 Paradigmas de Programação public class JanelaCheckBox extends JFrame{ private JCheckBox[] chb=new JCheckBox[4]; private JLabel[] lab=new JLabel[4]; private JLabel labnorte; private static String[] cidades={"Paris","Londres","Toquio","S_Francisco"}; public JanelaCheckBox(String s) { super(s); Container cont=this.getContentPane(); labnorte=new JLabel("Que cidades quer visitar ?"); int i=0; for(String s1 : cidades){ String nome="imagens\\"+s1+".GIF"; // string com o caminho do fich. Icon ic=new ImageIcon(nome); //criação das imagens //criação das etiquetas com as imagens não activas lab[i]=new JLabel(); lab[i].setIcon(ic); lab[i].setEnabled(false); chb[i]=new JCheckBox(s1); //criação das checkBoxs i++; } 2009/2010 Tópicos das aulas Teórico Práticas Helena Leitão & Dulce Mota 4 Paradigmas de Programação JPanel p1= new JPanel();// criação do painel p1 JPanel p2=new JPanel(); // criação do painel p2 for(JCheckBox c :chb) p1.add(c); // adicionar as checkboxs ao p1 for(JLabel l :lab) p2.add(l); // adicionar as etiquetas ao p2 // adicionar a etiqueta labnorte e os 2 paineis ao “content pane” cont.add(labnorte,BorderLayout.NORTH); cont.add(p1,BorderLayout.CENTER); cont.add(p2,BorderLayout.SOUTH); //criar objecto de escuta CheckBoxEscuta cbe=new CheckBoxEscuta(); //associar o objecto de escuta com cada checkbox for(JCheckBox c :chb) c.addItemListener(cbe); }//fecha construtor da janela 2009/2010 Tópicos das aulas Teórico Práticas Helena Leitão & Dulce Mota 5 Paradigmas de Programação //classe interna – classe do objecto de escuta class CheckBoxEscuta implements ItemListener { public void itemStateChanged(ItemEvent e){ int i=0; while(chb[i]!=e.getSource()) i++; // encontrada a checkbox geradora do evento //verifica se a checkbox foi marcada ou desmarcada if(chb[i].isSelected()){ lab[i].setEnabled(true); // torna activa a etiqueta correspondente } else lab[i].setEnabled(false);//torna inactiva a etiqueta }// fecha método } //fecha classe escuta }//fecha classe janela A2009/2010 Tópicos das aulas Teórico Práticas Helena Leitão & Dulce Mota 6