Verificação em checkbox

public void testar() throws SQLException{
    int matriculax = Integer.parseInt(txtMatricula.getText()), computador = Integer.parseInt(txtComputador.getText());
    String login = txtLogin.getText(), senha = txtSenha.getText(), confirm = confirmSenha.getText(), nome = txtNome.getText();
    Usuario usuario = new Usuario(login, senha);
    usuario.setNome(nome);
    if(cADM.isSelected()){
        usuario.setAdm(1);
    }
    if(cNormal.isSelected()){
        usuario.setAdm(3);
    }
    if(cEsta.isSelected()){
        usuario.setAdm(2);
    }
    UsuarioDAO usuarioDAO = new UsuarioDAO();
    Matricula matricula = new Matricula(matriculax,computador);
    Alerts alertar = new Alerts();
    if (txtLogin.getText().trim().isEmpty() || txtSenha.getText().trim().isEmpty()) {
        alertar.alertCadastroVazio();
    }else if (senha.equals(confirm)) {
        if (aFachada.getInstancia().incluirUsuario2(usuario,matricula)) {
            alertar.alertUsuarioCadastrado();
        } else {
            alertar.alertUsuarioNCadastrado();
        }
    } else {
            alertar.alertSenhaDif();
    }
}


bom desse jeito quando eu crio um usuario marcando os 3 checkbox irá o último valor marcado
eu queria fazer uma verificação para que caso tenha mais de 1 selecionado não faça o cadastro

alguém poderia dar uma luz?
checkbox é a melhor opção?

CheckBox se usa quando se tem a necessidade de recuperar mais do que uma opção.
Para casos onde o usuário só pode selecionar uma única opção, se usa o RadioButton.

Caso queira deixar dessa forma e só validar, recupere o valor dos três CheckBox e verifique se a quantidade de Cheks marcados é maior do que 1.

1 curtida
[quote="Jonathan_Medeiros, post:2, topic:389336, full:true"]

CheckBox se usa quando se tem a necessidade de recuperar mais do que uma opção.
Para casos onde o usuário só pode selecionar uma única opção, se usa o RadioButton.

Caso queira deixar dessa forma e só validar, recupere o valor dos três CheckBox e verifique se a quantidade de Cheks marcados é maior do que 1.
[/quote]

Você poderia me ajudar como faria isso? eu faria um if no caso?
if(cADM.isSelected() && cNormal.isSelected() && cEsta.isSelected())
?

Dessa forma só vai funcionar se os 3 estiverem marcados!

boolean[] opcoes = new boolean[3];

opcoes[0] = cADM.isSelected();
opcoes[1] = cNormal.isSelected();
opcoes[2] = cEsta.isSelected();

int qtdOpcoesMarcadas = 0;

for (boolean opc : opcoes) {
    if (opc) {
        qtdOpcoesMarcadas++;
    }
}

if (qtdOpcoesMarcadas > 1) {
    //Existe mais de uma opção selecionada
}
1 curtida

vlww mano
deu certo
você poderia me ajudar com uma questão com um check box?

tipo tenho uma tabela
serviços que tem 2 campos id / nomes
e tem os ids já predefinidos ex: 1 - formatar / 2 - backup
e vou ter os checkbox que irei por 2 um com nome formatar outro com nome backup (vão ter mais, apenas exemplo)
iria setar o checkbox formatar para 1 o checkbox backup para 2 e assim nos outros de acordo com o bd
eu queria inserir esses valores em uma tabela chamada
relatorio serviços que tem como chave estrangeira a tabela serviços

de modo que não fique assim

id relatorio-serv = 1 / id serviços = 1,2 / id boletim = 1

e sim assim:

id relatorio-serv = 1 / id serviços = 1 / id boletim = 1
id relatorio-serv = 2 / id serviços = 2 / id boletim = 1`

Basta seguir a mesma ideia do que já te mostrei, recupere os valores dos checks, como cada um deles você identifica com um ID, basta fazer um laço e inserir os registros.

1 curtida

Vlw mano irei tentar
Opa só mais uma coisa
boolean opc : opcoes eu não consegui sacar essa parte o que seria esse : ?

A expressão como um todo se chama for each, com ela conseguimos percorrer um array ou uma lista elemento por elemento.

Nesse exemplo o opc recebe cada valor booleano contido no array opcoes, a cada iteração do laço o opc recebe o valor contido na posição.

Aquilo seria o equivalente a isso:

for (int i = 0; i < opcoes.length; i++) {
    if (opcoes[i]) {
        qtdOpcoesMarcadas++;
    }
}
1 curtida

entendi,
no caso eu poderia
fazer o insert dentro desse if
eu teria que no caso colocar

opcoes[0] = checkboxFormatar
opcoes[1] = CheckBoxBackup

colocaria um if depois disso para setar os valores e
faria o for each com o insert?

Não, isso é pra validação!

Para tratar inserts você cria um outro método separado que vai fazer essa operação, e não vai usar um for each, será um laço comum.

Primeiro tente fazer, e a medida que for evoluindo vai postando as dúvidas mais pontuais com o código que você está fazendo.

1 curtida

ok mano vou tentar agora,
só uma coisa eu conseguiria usar esse mesmo codigo que você me passou como base

um ex:
e utilizar qtdOpcoesMarcadas
dentro do outro metodo para fzr o insert?

Pode sim, sem problema!

1 curtida

public void xd(){
Servicos servicos = new Servicos();
if(checkComponente.isSelected()){
servicos.setId_Servicos(1L);
}
if(checkPeriferico.isSelected()){
servicos.setId_Servicos(2L);
}
if(checkLimpezaF.isSelected()){
servicos.setId_Servicos(3L);
}
boolean[] opcoes = new boolean[3];

opcoes[0] = checkComponente.isSelected();
opcoes[1] = checkPeriferico.isSelected();
opcoes[2] = checkLimpezaF.isSelected();

int opcselecionada = 0;
for (boolean opc : opcoes) {
    if (opc) {
        opcselecionada++;
    }
}

while(opcselecionada ){

}
}`

opa mano eu fiz algo parecido com isso, mas estou com dúvida em qual condição botar no while e não cosnegui imaginar como criar um metodo fora para chamar opcselecionada .

Não consigo ver utilidade nem lógica nesse código, você está complicando as coisas sem necessidade jovem!
Bastaria criar uma lista de Serviços e adicionar os serviços marcados nessa lista, com a lista montada é só fazer um laço e realizar os inserts!

List<Servicos> servicosList = new ArrayList<>();

    if(checkComponente.isSelected()){
        Servicos s = new Servicos();
        s.setId_Servicos(1L);
        servicosList.add(s);
    }
    if(checkPeriferico.isSelected()){
        Servicos s = new Servicos();
        s.setId_Servicos(2L);
        servicosList.add(s);
    }
    if(checkLimpezaF.isSelected()){
        Servicos s = new Servicos();
        s.setId_Servicos(3L);
        servicosList.add(s);
    }

Agora é só fazer um laço que percorre a lista e que realiza os inserts dos serviços.

1 curtida

Opa por questão de organização como eu conseguiria percorrer essa lista em uma outra classe DAO?

Passe a lista por parâmetro para o método desejado na sua classe DAO.

1 curtida

opa man eu fiz o seguinte passei a lista e a pessoa selecionada na lista

RequisicaoDAO requisicaoDAO = new RequisicaoDAO();
requisicaoDAO.inserir(servicosList,selecionada);

e fiz esse metodo no meu DAO

public void inserir(List s, Requisicao r) throws SQLException{
    PreparedStatement inserir = con.prepareStatement("INSERT INTO boletim (idcomputador_requisicao,data_saida) VALUES("+r.getId()+",now())",PreparedStatement.RETURN_GENERATED_KEYS);
    
    try {
        con.setAutoCommit(false);
        inserir.executeUpdate();
        ResultSet rs = inserir.getGeneratedKeys();
        rs.next();
        Long idGerado = rs.getLong(1);
        for (Servicos servicoxd : s){
        String sql = "INSERT INTO relatorios_servicos (idservicos,idboletim) VALUES("+s.getId_Servicos+","+idGerado+")";
        PreparedStatement inserirx = con.prepareStatement(sql);
        inserirx.executeUpdate();
        }
        } catch (SQLException ex) {
        }  
}

primeiro inserir o boletim depois peguei o id gerado e botei para inserir na tabela relatorio_serviços
mas estou com error
nessa parte:
for (Servicos servicoxd : s){

error2

esse +s.getId_Servicos+
deveria ser: +servicoxd.getId_Servicos+?

Usando um for each você teria que usar o objeto atual do ciclo do laço que nesse caso seria o servicoxd.

Eu tentei com for each, em outra classe e não funcionou, mas na mesma classe vsai, o problema está no Serviços servicosxd
Object cannot be converted to Servicos
public void inserir(List s, Requisicao r)
for (Servicos servicoxd : s)

Você tem que tipar a lista, uma lista sem tipagem não pode ser convertida pra um objeto específico!

public void inserir(List<Servicos> s, Requisicao r)

1 curtida