Ajuda para setar valores de um combo box em um metodo

31 respostas Resolvido
LostSpirit

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

31 Respostas

LostSpirit

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.

rodriguesabner

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

rodriguesabner

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

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

LostSpirit

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

rodriguesabner

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

LostSpirit

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:

rodriguesabner

Então não precisa usar o List.

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

LostSpirit

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

rodriguesabner

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

LostSpirit

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

rodriguesabner

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


obsDepartamentos é um combobox???

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

rodriguesabner

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

LostSpirit

opa vlw man vou dar uma olhada.

LostSpirit
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?

rodriguesabner

Vc pode usar a variável selected.

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

imprimir_combo(selected);

LostSpirit

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

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

Não entendi esse getId_departamento();. Vc não quer passar o parametro pra o PreparedStatement?

LostSpirit

isso eu fiz na tela de cadastro

simm eu queria passar o parametro getId_departamento
para setar no insert

rodriguesabner

Então o exemplo que passei ali em cima deve ajudar

LostSpirit

opa mano eu pensando
consegui fazer isso:

cbDepart.setOnAction((ActionEvent event) -> {
        Departamento d = new Departamento();
        d.setId_departamento(cbDepart.getSelectionModel().getSelectedItem().getId_departamento());  
   });

assim eu poderia utilizar o d como parametro
mas eu estou com um problema eu não irei poder acessar o d dentro do meu metodo para criar o enviar os parametros.

rodriguesabner

Cara:

Departamento mod = new Departamento();

Object selected = cbDepart.getSelectionModel().getSelectedItem();
int i = (int) selected;
mod.setId_departamento(i);

Depois, na hora de setar no banco, é só fazer isso:

pst.setInt(mod.getId_departamento());

LostSpirit

tentei assim porem deu error:

public void initialize(URL url, ResourceBundle rb) {

depart();

cbDepart.setOnAction((ActionEvent event) -> {

Object selected = cbDepart.getSelectionModel().getSelectedItem().getId_departamento();

int i = (int) selected;

departamento.setId_departamento(i);

System.out.println(""+departamento.getId_departamento());
});
private Departamento departamento;

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException

X

tenta assim

nomedacombobox.setModel(new DefaultComboBoxModel(departamentos.toArray()))

ai pra pegar o item selecionado

departamento =(Departamento)nomedacombobox.getSelectedItem()

LostSpirit

eu tentei assim e não tem essa classe setmodel
cbDepart.setModel(new DefaultComboBoxModel(departamentos.toArray()));

LostSpirit

Como eu conseguiria popular meu combo box com essa consulta que fiz no meu DAO
?

public class DepartamentoDAO {

    private Connection con;

    public DepartamentoDAO() {
        this.con = new ConnectionFactory().getConnection();
    }

    public boolean popularComboBox() throws SQLException{
        List<String> setores = new ArrayList<String>();
        String query = "SELECT * FROM departamentos";
        PreparedStatement ps = con.prepareStatement(query);
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
           setores.add(rs.getString("nome_setor"));
           }

    ps.close();
    return true;
    }
}

teria como popular?

LostSpirit

@FXML
private JFXComboBox cbDepart;
ss

X
public List<Departamento> listar() {
List<Departamento> departamentos = new ArrayList();
        try {
            psmt = connect.prepareStatement("SELECT id, nome from departameto", PreparedStatement.RETURN_GENERATED_KEYS);
            rs = psmt.executeQuery();
            while (rs.next()) {
                Departamento d = new Departamento();
                d.setId(rs.getInt("id"));
                d.setNome(rs.getString("nome"));
                departamentos.add(d);
            }
            return departamentos;
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        return null;
        }
}

não consegui editar o post de cima, e não entende de JFx

LostSpirit
Solucao aceita
public void test(){
    Departamento departamento = (Departamento) cbDepart.getSelectionModel().getSelectedItem();
    JOptionPane.showMessageDialog(null,"ID: "+departamento.getId_departamento()+"nome"+departamento.getNome_setor());
    JOptionPane.showMessageDialog(null,"ID: "+departamento.getId_departamento()+"nome"+departamento.getNome_setor());
    JOptionPane.showMessageDialog(null,"ID: "+departamento.getId_departamento()+"nome"+departamento.getNome_setor());
}

vlw manos, consegui resolver…

Criado 2 de julho de 2019
Ultima resposta 3 de jul. de 2019
Respostas 31
Participantes 3