Ajuda para setar valores de um combo box em um metodo

bom eu tenho meu metodo na minha tela de cadastro:

public void cadastrar(){
    String login = txtLogin.getText(), senha=txtSenha.getText(), confirm = confirmSenha.getText(), nome=txtNome.getText();
    int matricula=Integer.parseInt(txtMatricula.getText());
    int nComputador=Integer.parseInt(txtComputador.getText()),modem = Integer.parseInt(txtModem.getText()),impressora=Integer.parseInt(txtImpressora.getText()),monitor=Integer.parseInt(txtMonitor.getText());
    
    
    Departamento setor1 = new Departamento(0, "setor1");
    Departamento setor2 = new Departamento(1, "setor2");
    Departamento setor3 = new Departamento(2, "setor3");
    Departamento setor4 = new Departamento(4, "setor4");
    
    departamentos.add(setor1);
    departamentos.add(setor2);
    departamentos.add(setor3);
    departamentos.add(setor4);
    obsDepartamentos = FXCollections.observableArrayList(departamentos);
    cbDepart.setItems(obsDepartamentos);
    
    Alerts alertar = new Alerts();
    Usuario usuario = new Usuario(login,senha,nome,matricula);
    Equipamentos equipamentos = new Equipamentos(nComputador,modem,impressora,monitor);
    if (txtLogin.getText().trim().isEmpty() || txtSenha.getText().trim().isEmpty() || confirmSenha.getText().trim().isEmpty() || txtNome.getText().trim().isEmpty() || txtMatricula.getText().trim().isEmpty()|| txtComputador.getText().trim().isEmpty()){
    alertar.alertCadastroVazio();
    }else if (senha.equals(confirm)){
        if (aFachada.getInstancia().incluirUsuario(usuario,equipamentos)) {
            alertar.alertUsuarioCadastrado();
        } else {
            alertar.alertUsuarioNCadastrado();
        }
    }else{
     alertar.alertSenhaDif();
    }
}

e esse é a parte do combo box:

    Departamento setor1 = new Departamento(0, "setor1");
    Departamento setor2 = new Departamento(1, "setor2");
    Departamento setor3 = new Departamento(2, "setor3");
    Departamento setor4 = new Departamento(4, "setor4");
    
    departamentos.add(setor1);
    departamentos.add(setor2);
    departamentos.add(setor3);
    departamentos.add(setor4);
    obsDepartamentos = FXCollections.observableArrayList(departamentos);
    cbDepart.setItems(obsDepartamentos);

como eu conseguiria passar o departamento nesse codigo:

Alerts alertar = new Alerts();
Usuario usuario = new Usuario(login,senha,nome,matricula);
 Equipamentos equipamentos = new Equipamentos(nComputador,modem,impressora,monitor);
if (txtLogin.getText().trim().isEmpty() || txtSenha.getText().trim().isEmpty() || confirmSenha.getText().trim().isEmpty() || txtNome.getText().trim().isEmpty() || txtMatricula.getText().trim().isEmpty()|| txtComputador.getText().trim().isEmpty()){
 alertar.alertCadastroVazio();
 }else if (senha.equals(confirm)){
    if (aFachada.getInstancia().incluirUsuario(usuario,equipamentos)) {
        alertar.alertUsuarioCadastrado();
     } else {
         alertar.alertUsuarioNCadastrado();
    }
 }else{
  alertar.alertSenhaDif();
 }

mas eu não tou conseguindo imaginar como vou passar isso como parametro para meu outro metodo na minha classe DAO:

   public void cadastrar(Usuario u, Equipamentos e, Departamento d) throws SQLException{
        PreparedStatement equipamentos = con.prepareStatement("INSERT INTO equipamentos(numero_computador, numero_modem, numero_impressora, numero_monitor) VALUES(?,?,?,?)",PreparedStatement.RETURN_GENERATED_KEYS);
        equipamentos.setInt(1, e.getNumero_computador());
        equipamentos.setInt(2, e.getNumero_modem());
        equipamentos.setInt(3, e.getNumero_impressora());
        equipamentos.setInt(4, e.getNumero_monitor());
        try {
        con.setAutoCommit(false);
        equipamentos.executeUpdate();
        ResultSet resultEquip = equipamentos.getGeneratedKeys();
        resultEquip.next();
        Long idEquipGerado = resultEquip.getLong(1);
        String cadastrarUsuario = "INSERT INTO USUARIO(idpermissao,login, senha, nome,matricula,online,idequipamento,iddepartamento) VALUES(3,?,?,?,?,0,?,?)";
        PreparedStatement cadastrar = con.prepareStatement(cadastrarUsuario);
        cadastrar.setString(1, u.getLogin());
        cadastrar.setString(2,u.getSenha());
        cadastrar.setString(3,u.getNome());
        cadastrar.setInt(4,u.getMatricula());
        cadastrar.setLong(5,idEquipGerado);
        cadastrar.setInt(6,d.getId_departamento());
        cadastrar.executeUpdate();
        }catch(SQLException ex){
        }
    }

Eu sei que é uma lista
mas eu queria pegar apenas o valor do que o usuario selecionou para enviar como parametro para o meu metodo de cadastro.

Porquê não aproveita o getter e setter? Só jogar o valor da combobox na variavel dele.

Ex:

Usuario mod = new Usuario();
mod.setNome((String) campo_nome.getSelectedItem());
    Departamento setor1 = new Departamento(0, "setor1");
    Departamento setor2 = new Departamento(1, "setor2");
    Departamento setor3 = new Departamento(2, "setor3");
    Departamento setor4 = new Departamento(4, "setor4");
    
    departamentos.add(setor1);
    departamentos.add(setor2);
    departamentos.add(setor3);
    departamentos.add(setor4);
    
    obsDepartamentos = FXCollections.observableArrayList(departamentos);
    cbDepart.setItems(obsDepartamentos);

Departamento depart = new Departamento();
depart.setId_departamento((int)) obsDepartamentos.getSelectedItem());

no meu caso seria mais ou menos isso
mas eu não entendi o que seria esse campo_nome?

depart.setId_departamento((int)) obsDepartamentos.getSelectedItem());

Porquê está usando uma lista? Mas seria isso mesmo;

1 curtida

eu tinha procurado alguns exemplos de combo box e só consegui fzr assim
teria como fazer de um jeito melhor
para esse objetivo?

Você quer passar vários campos pra uma coluna só? Por exemplo,

Coluna X:
1,2,3,4,5,6,7,8,9.

Se você só quer pegar um item de cada, só passar pro getSelectedItem mesmo

na verdd eu tenho uma tabela com os valores já setados do setores ex

1 = setor 1
2 = setor 2
ai eu queria reproduzir isso na tela de cadastro e quando o usuario selecionar uma das opções setar
o id da classe modelo : Departamento
para q eu possa mandar pro banco de dados esse id do departamentos

e esse jeito está retornando esse error:

Então não precisa usar o List.

Agora que vi que vc colocou errado:
depart.setId_departamento((int) obsDepartamentos.getSelectedItem());

como eu conseguiria fazer sem o list?
eu procurei vários exemplos e só tinha achado com o list

Ué, você não vai passar cada combobox pra cada coluna?

sim
tipo eu desse modo criei 4 opções no combo box
e eu seto eles de acordo com os valores no bd a classe modelo departamentos
na minha tabela já tenho esses 4 id’s definidos

e eu tou com error nesse codigo:
depart.setId_departamento((int) obsDepartamentos.getSelectedItem());

obsDepartamentos não tem esse metodo: getSelectedItem

Ah, entendi, só desse jeito ta certo então.


obsDepartamentos é um combobox???

@FXML
private JFXComboBox<Departamento> cbDepart;
private List<Departamento> departamentos = new ArrayList();
private ObservableList<Departamento> obsDepartamentos;

obsDepartamentos = FXCollections.observableArrayList(departamentos);

não é cbDepart mas tb não tem esse metodo.

Brother, cê tá usando JavaFX, esqueci que ele é cheio de frescuras. Desculpa mesmo.

Tenta esse link aqui: https://coderanch.com/t/700932/java/selected-item-combobox-tableview-javafx

1 curtida

opa vlw man vou dar uma olhada.

    cbDepart.setOnAction((ActionEvent event) -> {
        Object selected = cbDepart.getSelectionModel().getSelectedItem();
   });

tipo man eu tou com uma dúvida
com isso eu estaria selecionando o objeto selecionado

como eu conseguiria passar isso por parametro?

Vc pode usar a variável selected.

private void imprimir_combo(Object combo_selecionada){
    ....
}

imprimir_combo(selected);

entendi
mas desse modo como eu conseguiria setar pro banco de dados

        cadastrar.setInt(6,d.getId_departamento());

pois eu iria fazer assim antes setando com o id do departamento
agora com esse object eu n faço ideia kk.

eu deixei o Object selected
assim;

    cbDepart.setOnAction((ActionEvent event) -> {
        Object selected = cbDepart.getSelectionModel().getSelectedItem().getId_departamento();
   });

Ahhhhh, esse parametro.

Esse seria o set.

ModeloClasse mod;

int i = (int) selected;
mod.setId_departamento(i);

Esse seria o get.

PreparedStatement pst......
ModeloClasse mod;

int i = (int) selected;
pst.setInt(mod.getId_departamento());