package pontujar.combobox.dinamica; import import import import import java.awt.Font; java.awt.Rectangle; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.util.ArrayList; import import import import import import import javax.swing.AbstractListModel; javax.swing.ComboBoxModel; javax.swing.JComboBox; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JPanel; javax.swing.SwingUtilities; /** * Classe responável por criar ComboBox dinâmica. * @author Gabriel * @since 19/10/2010 * @version 1.0 */ public class ComboBoxDinamica extends JFrame { private static final long serialVersionUID = 1L; private private private private private JPanel jContentPane = null; JComboBox cBoxPaises = null; JComboBox cBoxEstados = null; JLabel lblPaises = null; JLabel lblEstados = null; /** * This method initializes lblEstados * @return javax.swing.JLabel */ public JLabel getLblEstados() { if(lblEstados == null){ lblEstados = new JLabel(); lblEstados.setBounds(new Rectangle(10, 40, 50, 20)); lblEstados.setFont(new Font("Verdana", Font.BOLD, 12)); lblEstados.setText("Estado"); } return lblEstados; } /** * This method initializes lblPaises * @return javax.swing.JLabel */ public JLabel getLblPaises() { if(lblPaises == null){ lblPaises = new JLabel(); lblPaises.setBounds(new Rectangle(10, 10, 50, 20)); lblPaises.setFont(new Font("Verdana", Font.BOLD, 12)); lblPaises.setText("País"); } return lblPaises; } /** * This method initializes cBoxPaises * @return javax.swing.JComboBox */ private JComboBox getCBoxPaises() { if (cBoxPaises == null) { // Passa no construtor da ComboBox de Paises a chamada do método que retorna todos // os Paises cadastrados. // (Base de Dados simulada pela Classe SimuladorBancoDados) cBoxPaises = new JComboBox(SimuladorBancoDados.consultarTodosPaises().toArray()); cBoxPaises.setBounds(new Rectangle(62, 10, 160, 20)); cBoxPaises.setFont(new Font("Verdana", Font.PLAIN, 12)); cBoxPaises.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // Preenche a comboBox de Estado ao selecionar algum item. preencherComboBoxEstados((String)getCBoxPaises().getSelectedItem()); } }); // Preenche a comboBox de Estado ao abrir a tela. // Só será executado no momento da inicial. preencherComboBoxEstados((String)getCBoxPaises().getSelectedItem()); } return cBoxPaises; } /** * Método responsável por preencher dinamicamente a comboBox de Estado * com base no país informado. * @param String nomePais - País selecionado. */ private void preencherComboBoxEstados(String nomePais){ //Pega o Model da comboBox de Estados ModeloComboBox model = (ModeloComboBox)getCBoxEstados().getModel(); //Adiciona na comboBox de Estados todos os estados encontrados na base de dados. //(Base de Dados simulada pela Classe SimuladorBancoDados) model.addAll(SimuladorBancoDados.consultarEstadosPorPais(nomePais)); } /** * This method initializes cBoxEstados * @return javax.swing.JComboBox */ private JComboBox getCBoxEstados() { if (cBoxEstados == null) { cBoxEstados = new JComboBox(new ModeloComboBox()); cBoxEstados.setBounds(new Rectangle(62, 40, 160, 20)); cBoxEstados.setFont(new Font("Verdana", Font.PLAIN, 12)); } return cBoxEstados; } /** * This is the default constructor */ public ComboBoxDinamica() { super(); initialize(); } /** * This method initializes this * @return void */ private void initialize() { this.setSize(238, 106); this.setResizable(false); this.setContentPane(getJContentPane()); this.setTitle("ComboBox Dinâmica"); } /** * This method initializes jContentPane * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getCBoxPaises(), null); jContentPane.add(getCBoxEstados(), null); jContentPane.add(getLblPaises(), null); jContentPane.add(getLblEstados(), null); } return jContentPane; } /** * Classe interna responsável por gerenciar a comboBox de Estados. * @author Gabriel * @since 19/10/2010 * @version 1.0 */ private class ModeloComboBox extends AbstractListModel implements ComboBoxModel{ private static final long serialVersionUID = -5909856485211809081L; // Lista que representa os dados da comboBox ArrayList<String> dados = new ArrayList<String>(); // Atributo onde será armazenado o valor do item selecionado na comboBox. String selecionado = null; public Object getElementAt(int index) { return dados.get(index); } public int getSize() { return dados.size(); } public void setSelectedItem(Object newItem){ selecionado = (String)newItem; } public Object getSelectedItem(){ if(selecionado == null && dados.size() > 0){ selecionado = dados.get(0); } return selecionado; } /** * Método responsável por adicionar valores na comboBox. * @param String[] listaDados - Dados a serem adicionados. */ public void addAll(String[] listaDados) { this.dados.clear(); setSelectedItem(null); for(String dado : listaDados){ // Adicionando na comboBox item por item. this.dados.add(dado); //Atualiza o visual da comboBox a cada item adicionado. fireIntervalAdded(dado, 0, 0); } } } /** * @param args */ public static void main(String[] args) { // TODO Stub de método gerado automaticamente SwingUtilities.invokeLater(new Runnable() { public void run() { ComboBoxDinamica thisClass = new ComboBoxDinamica(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } }