Java Netbeans ComboBox, JFrame

14 respostas
java
L

Boa tarde.

Estou desenvolvendo uma aplicação JAVA no NetBeans.

Tenho uma tela de cadastro de endereços. Nessa tela possuem todos os campos e um jComboBox no qual está armazenado as cidades que estão cadastradas no banco de dados.

Do lado do combobox de cidades tenho um botão que abre uma tela que possui a tabela das cidades cadastradas para que o usuário possa pesquisar uma cidade, selecionar uma linha da tabela e clicar no botão selecionar para selecionar a cidade desejada.

Como faço para setar/atualizar o valor da linha selecionada da tabela ( nome da cidade e estado) dentro da combobox sem fechar a tela de cadastro de endereços ?

Até então, consigo pegar os valores da linha e imprimir em um System.println () mas não consigo “atualizar no Combobox”, ele fica sempre no primeiro item.

OBS: ao selecionar a linha e clicar no botão selecionar a tela de pesquisa se fecha mas na combobox não atualiza

14 Respostas

S

Implementa o seu próprio ComboBoxModel para renderizar sua coleção de objetos.
Dái é só atualizar o objeto desejado que o JComboBox vai refletir as mudanças.

L

Boa Tarde, não consegui solucionar.

Vou postar meu código.

Este método eu chamo dentro do botão (actionPerformed) Selecionar da Tela Pesquisar Cidade, que contém a tabela de cidades. O combobox de cidades está dentro da tela de cadastro de endereços.

public void selecionarCidade() {

TelaCadastroEndereco telaCadastroEndereco = new TelaCadastroEndereco();
   
        int linha = jTableCidade.getSelectedRow();
        int codigo = (int) jTableCidade.getValueAt(linha, 0);
        modeloCidade = controleCidade.retornarUmaCidade(codigo); //chama da classe DaoCidade
        telaCadastroEndereco.jComboBoxCidade.setSelectedItem(modeloCidade.getNome().concat
        (" - ").concat(modeloCidade.getEstado()));     
        dispose(); 
}

Método dentro da Classe DaoCidade

public ModeloCidade retornarUmaCidade(int idCidade) {

ModeloCidade modelCidade = new ModeloCidade();
    
    try {
        this.conectar();
        this.executarSQL(
                "SELECT "
                + "nome,"
                + "estado"
                + " FROM"
                + " tb_cidade"
                + " WHERE"
                + " idcidade = '" + idCidade + "'"
                + ";"
        );

        while (this.getResultSet().next()) {
            modelCidade.setNome(this.getResultSet().getString(1));
            modelCidade.setEstado(this.getResultSet().getString(2));
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        this.fecharConexao();
    }
    return modelCidade;
}
S

Posta o código que alimenta o seu combo, é ele que você vai ter que mudar para usar um ComboBoxModel customizado.

L

public void preencherComboBoxCidade() {

listaCidade = controleCidade.retornarListaCidades();

    for (int i = 0; i < listaCidade.size(); i++) {
        jComboBoxCidade.addItem(listaCidade.get(i).getNome().concat

(" - ").concat(listaCidade.get(i).getEstado()));

}
}
S

Beleza agora olha a documentação do ComboBoxModel e troca esse teu loop por uma implementação que renderize a sua listaCidade.

Feito isso, é só você alterar os atributos dos objetos da lista que seu combo estará “automagicamente” atualizado.

A maioria dos componentes do Swing são MVC, então eles tem uma interface Modelo que serve como fonte de dados para o componente.

Esse tipo de loop que você fez, sem usar o ComboBoxModel, só é útil para conteúdo estático, para conteúdo dinâmico sempre se usa a interface Model do componente.

L

Código ficou assim, porém sem sucesso :frowning:
Esse código foi criado dentro da TelaCadastroEndereco

public void novoPreenchimentoCombo(){

listaCidade = controleCidade.retornarListaCidades();
    
    DefaultComboBoxModel modelo = (DefaultComboBoxModel) jComboBoxCidade.getModel();
    
    for(ModeloCidade c : listaCidade) { 
        modelo.addElement(c.getNome().concat(" - ").concat(c.getEstado()));   
    }
}
S

Não é para instanciar um DefaultComboBoxModel, percebe que do jeito que você fez, continua tendo um loop pra adicionar itens?
Isso é desnecessário.

Crie o seu o seu próprio ComboBoxModel, dê uma olhada no link abaixo, nele tem 3 implementações de ComboBoxModel:

L

Vou postar as telas. Ainda não consegui implementar.
Criei o próprio combomodel, mas acontece a mesma coisa.

S

Às imagens não ajudam pois não dá pra ver como foi escrito o código.
Posta o código da tela de cadastro de endereço e da tela de pesquisa por cidade.

L

Tela Pesquisar Cidade

package visao;

import controle.ControleCidade;

import java.util.ArrayList;

import javax.swing.table.DefaultTableModel;

import modelo.ModeloCidade;

public class TelaPesquisarCidade extends javax.swing.JFrame {

ArrayList<ModeloCidade> listaCidades = new ArrayList<>();
ArrayList<ModeloCidade> listaCidadesPesquisa = new ArrayList<>();
ControleCidade controleCidade = new ControleCidade();

public TelaPesquisarCidade() {
    initComponents();
    preencherTabela();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jTableCidadePesquisa = new javax.swing.JTable();
    jButtonSelecionar = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTableCidadePesquisa.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {

        },
        new String [] {
            "Código", "Nome", "Estado"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, true, true
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    jScrollPane1.setViewportView(jTableCidadePesquisa);

    jButtonSelecionar.setText("Selecionar");
    jButtonSelecionar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButtonSelecionarActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jButtonSelecionar)
                    .addGap(0, 0, Short.MAX_VALUE))))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jButtonSelecionar)
            .addGap(0, 14, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

private void jButtonSelecionarActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    pesquisarCidade();
}                                                 

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(TelaPesquisarCidade.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(TelaPesquisarCidade.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(TelaPesquisarCidade.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(TelaPesquisarCidade.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TelaPesquisarCidade().setVisible(true);
        }
    });
}

public void preencherTabela() {

    listaCidades = controleCidade.retornarListaCidades();
    DefaultTableModel model = (DefaultTableModel) jTableCidadePesquisa.getModel();
    model.setNumRows(0);

    int cont = listaCidades.size();

    for (int i = 0; i < cont; i++) {

        model.addRow(new Object[]{
            listaCidades.get(i).getIdCidade(),
            listaCidades.get(i).getNome(),
            listaCidades.get(i).getEstado(),});
            jTableCidadePesquisa.changeSelection(0, 3, false, false);
    }
}

public void pesquisarCidade () {
    
    TelaCadastroEndereco telaCadastroEndereco = new TelaCadastroEndereco();
    
    int linha = this.jTableCidadePesquisa.getSelectedRow();
    int codigo = (int) this.jTableCidadePesquisa.getValueAt(linha, 0);
    listaCidadesPesquisa = controleCidade.retornaUC(codigo);
    
    for (ModeloCidade cidade : listaCidadesPesquisa) {
        telaCadastroEndereco.jComboBoxCidade.setSelectedItem(cidade.getNome().concat(" - ")
        .concat(cidade.getEstado()));
    }
    
    dispose();
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButtonSelecionar;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTableCidadePesquisa;
// End of variables declaration

}

Tela Cadastro Endereço

package visao;

import controle.ControleCidade;

import controle.ControleEndereco;

import controle.UpperCaseDocument;

import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;

import javax.swing.JOptionPane;

import modelo.ModeloCidade;

import modelo.ModeloEndereco;

public class TelaCadastroEndereco extends javax.swing.JFrame {

ModeloEndereco modeloEndereco = new ModeloEndereco();
ArrayList<ModeloCidade> listaCidade = new ArrayList<>();
ControleEndereco controleEndereco = new ControleEndereco();
ControleCidade controleCidade = new ControleCidade();
public static String global;
public static String pesq;

public TelaCadastroEndereco() {

    initComponents();
    this.setLocationRelativeTo(null);
    upperCase();
    atualizaComboCidade();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jLabelCodigo = new javax.swing.JLabel();
    jTextFieldIdEndereco = new javax.swing.JTextField();
    jTextFieldRua = new javax.swing.JTextField();
    jLabelRua = new javax.swing.JLabel();
    jTextFieldNumero = new javax.swing.JTextField();
    jLabelNumero = new javax.swing.JLabel();
    jTextFieldBairro = new javax.swing.JTextField();
    jLabelBairro = new javax.swing.JLabel();
    jLabelCep = new javax.swing.JLabel();
    jTextFieldComplemento = new javax.swing.JTextField();
    jLabelComplemento = new javax.swing.JLabel();
    jLabelBairro1 = new javax.swing.JLabel();
    jButtonSalvar = new javax.swing.JButton();
    jButtonCancelar = new javax.swing.JButton();
    jFormattedTextFieldCep = new javax.swing.JFormattedTextField();
    jButtonProcurar = new javax.swing.JButton();
    jComboBoxCidade = new javax.swing.JComboBox();

    setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

    jLabelCodigo.setText("Código:");

    jTextFieldIdEndereco.setEditable(false);

    jLabelRua.setText("Rua:");

    jLabelNumero.setText("Número:");

    jLabelBairro.setText("Bairro:");

    jLabelCep.setText("CEP:");

    jLabelComplemento.setText("Complemento:");

    jLabelBairro1.setText("Cidade:");

    jButtonSalvar.setText("Salvar");
    jButtonSalvar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButtonSalvarActionPerformed(evt);
        }
    });

    jButtonCancelar.setText("Cancelar");
    jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButtonCancelarActionPerformed(evt);
        }
    });

    try {
        jFormattedTextFieldCep.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("#####-###")));
    } catch (java.text.ParseException ex) {
        ex.printStackTrace();
    }

    jButtonProcurar.setText("P");
    jButtonProcurar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButtonProcurarActionPerformed(evt);
        }
    });

    jComboBoxCidade.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseReleased(java.awt.event.MouseEvent evt) {
            jComboBoxCidadeMouseReleased(evt);
        }
    });
    jComboBoxCidade.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jComboBoxCidadeActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jButtonSalvar, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(jButtonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(jLabelBairro1)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jComboBoxCidade, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jButtonProcurar, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGap(0, 0, Short.MAX_VALUE))
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jTextFieldRua)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabelRua, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabelNumero)
                                    .addComponent(jTextFieldNumero, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(125, 125, 125)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabelComplemento)
                                    .addComponent(jTextFieldComplemento, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabelBairro)
                                .addComponent(jTextFieldBairro, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(18, 18, 18)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabelCep)
                                    .addGap(102, 102, 102))
                                .addComponent(jFormattedTextFieldCep)))
                        .addComponent(jLabelCodigo)
                        .addComponent(jTextFieldIdEndereco, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addContainerGap(51, Short.MAX_VALUE))))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(16, 16, 16)
            .addComponent(jLabelCodigo)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jTextFieldIdEndereco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(jLabelRua)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jTextFieldRua, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jLabelNumero)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jTextFieldNumero, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jLabelComplemento)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jTextFieldComplemento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
            .addGap(18, 18, 18)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabelCep)
                .addComponent(jLabelBairro))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jTextFieldBairro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jFormattedTextFieldCep, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(18, 18, 18)
            .addComponent(jLabelBairro1)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jButtonProcurar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jComboBoxCidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jButtonCancelar)
                .addComponent(jButtonSalvar))
            .addGap(26, 26, 26))
    );

    pack();
}// </editor-fold>                        

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                              

    TabelaEndereco tb = new TabelaEndereco();

    if (tb.global.equals("salvar")) {
        this.salvarEndereco();
        tabela.executarMetodoFrame();
    } else if (tb.global.equals("alterar")) {
        this.salvaAlteraEndereco();
        tabela.executarMetodoFrame();
    }
}                                             

private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                                
    limparCampos();
    dispose();
}                                               

private void jButtonProcurarActionPerformed(java.awt.event.ActionEvent evt) {                                                
    TelaPesquisarCidade telaPesquisarCidade = new TelaPesquisarCidade();
    telaPesquisarCidade.setVisible(true);    
}                                               

private void jComboBoxCidadeMouseReleased(java.awt.event.MouseEvent evt) {                                              

}                                             

private void jComboBoxCidadeActionPerformed(java.awt.event.ActionEvent evt) {                                                

}                                               

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(TelaCadastroEndereco.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(TelaCadastroEndereco.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(TelaCadastroEndereco.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(TelaCadastroEndereco.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TelaCadastroEndereco().setVisible(true);
        }
    });
}

public void salvarEndereco() {

    TabelaEndereco tabelaEndereco = new TabelaEndereco();

    try {

        modeloEndereco.setRua(this.jTextFieldRua.getText());
        modeloEndereco.setNumero(Integer.parseInt(this.jTextFieldNumero.getText()));
        modeloEndereco.setCep(this.jFormattedTextFieldCep.getText());
        modeloEndereco.setComplemento(this.jTextFieldComplemento.getText());
        modeloEndereco.setBairro(this.jTextFieldBairro.getText());
        modeloEndereco.setCidade(listaCidade.get(jComboBoxCidade.getSelectedIndex()));

    } catch (NumberFormatException nfe) {
        JOptionPane.showMessageDialog(this, "Informe apenas números.");
        jTextFieldNumero.requestFocus();
    }

    if (this.jTextFieldRua.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o nome da rua.");
        jTextFieldRua.requestFocus();
    } else if (this.jTextFieldNumero.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o número da rua.");
        jTextFieldNumero.requestFocus();
    } else if (this.jFormattedTextFieldCep.getText().equals("     -   ")) {
        JOptionPane.showMessageDialog(this, "Informe o CEP.");
        jFormattedTextFieldCep.requestFocus();
    } else if (jTextFieldComplemento.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o complemento.");
        jTextFieldComplemento.requestFocus();
    } else if (jTextFieldBairro.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o bairro.");
        jTextFieldBairro.requestFocus();
    } else if (jComboBoxCidade.getSelectedItem().toString().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o nome da cidade.");
        jComboBoxCidade.requestFocus();
    } else if (controleEndereco.salvarEndereco(modeloEndereco) > 0) {
        JOptionPane.showMessageDialog(this, "Cadastrado com sucesso.");
        limparCampos();
        tabelaEndereco.preencherTabela();

    }

}

public void salvaAlteraEndereco() {

    try {

        modeloEndereco.setIdEndereco(Integer.parseInt(this.jTextFieldIdEndereco.getText()));
        modeloEndereco.setRua(this.jTextFieldRua.getText());
        modeloEndereco.setNumero(Integer.parseInt(this.jTextFieldNumero.getText()));
        modeloEndereco.setCep(this.jFormattedTextFieldCep.getText());
        modeloEndereco.setComplemento(this.jTextFieldComplemento.getText());
        modeloEndereco.setBairro(this.jTextFieldBairro.getText());
        modeloEndereco.setCidade(listaCidade.get(jComboBoxCidade.getSelectedIndex()));

    } catch (NumberFormatException nfe) {
        JOptionPane.showMessageDialog(this, "Informe apenas números.");
        jTextFieldNumero.requestFocus();
    }

    if (this.jTextFieldRua.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o nome da rua.");
        jTextFieldRua.requestFocus();
    } else if (this.jTextFieldNumero.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o número da rua.");
        jTextFieldNumero.requestFocus();
    } else if (this.jFormattedTextFieldCep.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o CEP.");
        jFormattedTextFieldCep.requestFocus();
    } else if (jTextFieldComplemento.getText().equals("-")) {
        JOptionPane.showMessageDialog(this, "Informe o complemento.");
        jTextFieldComplemento.requestFocus();
    } else if (jTextFieldBairro.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o bairro.");
        jTextFieldBairro.requestFocus();
    } else if (jComboBoxCidade.getSelectedItem().toString().equals("")) {
        JOptionPane.showMessageDialog(this, "Informe o nome da cidade.");
        jComboBoxCidade.requestFocus();
    } else if (controleEndereco.alterarEndereco(modeloEndereco)) {
        JOptionPane.showMessageDialog(this, "Endereço alterado com sucesso.");
        limparCampos();
        dispose();
    }
}

public TabelaEndereco tabela;

public void MostrarTela(TabelaEndereco table) {

    this.tabela = table;
    setVisible(true);
}

public void executaMetodoAtualizar() {

    tabela.executarMetodoFrame();
}

public void upperCase() {

    jTextFieldRua.setDocument(new UpperCaseDocument());
    jTextFieldComplemento.setDocument(new UpperCaseDocument());
    jTextFieldBairro.setDocument(new UpperCaseDocument());

}

public void limparCampos() {

    jTextFieldRua.setText("");
    jTextFieldNumero.setText("");
    jTextFieldComplemento.setText("");
    jTextFieldBairro.setText("");
    jFormattedTextFieldCep.setText("");
    jComboBoxCidade.setSelectedItem("");
}

/*public void preencherComboBoxCidade() {

    listaCidade = controleCidade.retornarListaCidades();
    
    for (int i = 0; i < listaCidade.size(); i++) {
        jComboBoxCidade.addItem(listaCidade.get(i).getNome().concat(" - ").concat(listaCidade.get(i).getEstado()));
    }

}*/
public class ComboBoxModelCidade extends DefaultComboBoxModel<String> {

    ArrayList<ModeloCidade> listaCidade = new ArrayList<>();
    ArrayList<ModeloCidade> listaCidadesPesq = new ArrayList<>();
    

    ComboBoxModelCidade(ArrayList<ModeloCidade> cidades) {
        this.listaCidade = cidades;
    }

    @Override
    public int getSize() {
        return listaCidade.size();
    }

    @Override
    public String getElementAt(int index) {
        ModeloCidade cidade = listaCidade.get(index);
        return cidade.getNome().concat(" - ").concat(cidade.getEstado());

    }
}

public void atualizaComboCidade() {

    listaCidade = controleCidade.retornarListaCidades();
    jComboBoxCidade.setModel(new ComboBoxModelCidade(listaCidade));
    jComboBoxCidade.setSelectedIndex(0);
    
}
  
// Variables declaration - do not modify                     
private javax.swing.JButton jButtonCancelar;
private javax.swing.JButton jButtonProcurar;
private javax.swing.JButton jButtonSalvar;
public javax.swing.JComboBox jComboBoxCidade;
public javax.swing.JFormattedTextField jFormattedTextFieldCep;
private javax.swing.JLabel jLabelBairro;
private javax.swing.JLabel jLabelBairro1;
private javax.swing.JLabel jLabelCep;
private javax.swing.JLabel jLabelCodigo;
private javax.swing.JLabel jLabelComplemento;
private javax.swing.JLabel jLabelNumero;
private javax.swing.JLabel jLabelRua;
public javax.swing.JTextField jTextFieldBairro;
public javax.swing.JTextField jTextFieldComplemento;
public javax.swing.JTextField jTextFieldIdEndereco;
public javax.swing.JTextField jTextFieldNumero;
public javax.swing.JTextField jTextFieldRua;
// End of variables declaration

}

S

No pacote visao cria uma interface chamada PesquisaCidadeListener conforme abaixo:

package visao;

import modelo.ModeloCidade;

public interface PesquisaCidadeListener {

	void selecionouCidade(ModeloCidade cidadeSelecionada);
}

Em seguida vamos alterar a classe TelaPesquisarCidade declarando um atributo do tipo PesquisaCidadeListener e modificando o construtor dessa forma:

private final PesquisaCidadeListener listener;

    // agora pra criar um objeto da tela de pesquisa de cidade, precisa passar um listener como parâmetro
    public TelaPesquisarCidade(PesquisaCidadeListener listener) {
	    this.listener = Objects.requireNonNull(listener, "listener não pode ser null");
        initComponents();
        preencherTabela();
    }

O método pesquisaCidade vai ser simplesmente assim:

public void pesquisarCidade () {
        int linha = this.jTableCidadePesquisa.getSelectedRow();
        ModeloCidade cidade = listaCidades.get(linha);
        
        // notificar o listener sobre qual cidade foi selecionada
        listener.selecionouCidade(cidade);
        dispose();
    }

Agora a tela TelaCadastroEndereco vai implementar o PesquisaCidadeListener dessa forma:

public class TelaCadastroEndereco extends javax.swing.JFrame implements PesquisaCidadeListener {

O método jButtonProcurarActionPerformed vai ficar dessa forma:

private void jButtonProcurarActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // pra abrir a tela de pesquisa, vai passar a tela de endereço como listener
        TelaPesquisarCidade telaPesquisarCidade = new TelaPesquisarCidade(this);
        telaPesquisarCidade.setVisible(true);    
    }

E também vai ter que implementar o método selecionouCidade dessa forma:

@Override
	public void selecionouCidade(ModeloCidade cidadeSelecionada) {
		ComboBoxModelCidade comboBoxModel = (ComboBoxModelCidade) jComboBoxCidade.getModel();  
		int posicao = comboBoxModel.listaCidade.indexOf(cidadeSelecionada);
		jComboBoxCidade.setSelectedIndex(posicao);
	}
L

O combobox reflete a mudança ao clicar em SELECIONAR. Apenas um problema: ao clicar em SELECIONAR a cidade, seta um valor em branco (index com a posição -1) no combobox.

<a class="mention" href="/u/override">@Override</a>

public void selecionouCidade(ModeloCidade cidadeSelecionada) {

ComboBoxModelCidade comboBoxModel = (ComboBoxModelCidade) jComboBoxCidade.getModel();

int posicao = comboBoxModel.listaCidade.indexOf(cidadeSelecionada);

jComboBoxCidade.setSelectedIndex(posicao);

}

Tentei criar uma variável do tipo INT para pegar o número da linha selecionada da tabela para setar no index do combobox, conforme o código abaixo, porém não funcionou pois não pega o valor da linha selecionada, sempre fica no valor zero, acredito que é porque vem de outro frame.

<a class="mention" href="/u/override">@Override</a>

public void selecionouCidade(ModeloCidade cidadeSelecionada) {

TelaPesquisarCidade telaPesquisarCidade = new TelaPesquisarCidade(this);

ComboBoxModelCidade comboBoxModel = (ComboBoxModelCidade) jComboBoxCidade.getModel();

int linha = telaPesquisarCidade.jTableCidadePesquisa.getSelectedRow();

comboBoxModel.listaCidade.indexOf(cidadeSelecionada);

jComboBoxCidade.setSelectedIndex(linha);
}
S

Das duas uma:

  • ou a lista de cidades carregada na tela de pesquisa é diferente da lista de cidades utilizada pelo ComboBoxModel;
  • ou sua classe ModeloCidade não está implementando o hashcode e equals, teria que implementar.
L

Agora funcionou. Te agradeço de coração pela sua ajuda. Muito obrigado pela atenção. Forte abraço.

Criado 21 de março de 2023
Ultima resposta 30 de mar. de 2023
Respostas 14
Participantes 2