Java Netbeans ComboBox, JFrame

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

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.

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;
}

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

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()));

    }
}

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.

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()));   
    }
}

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:

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

À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.

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                   

}

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);
	}

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.

@Override
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.

@Override
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);

    }

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.

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

1 curtida