Boa tarde pessoal… Estou com o seguinte problema em meu código
List<FinBancos> lContas;
Controller c = new Controller();
em = c.getEntityManager();
try {
lContas = em.createQuery("SELECT t FROM FinBancosConta t").getResultList();
} finally {
em.close();
}
System.out.println(lContas);
// return lContas;
String nome = null;
for (FinBancosConta conta : getContas()) {
nome = conta.getDsNick();
Object[] opcoes ={nome};
Object res = JOptionPane.showInputDialog(null, "Escolha um item", "Selecao de itens",
JOptionPane.PLAIN_MESSAGE, null, opcoes, "");
Retorno no console [Conta itaú, Banco do Brasil, Banco teste]
Resultado do meu ComboBox
Está apenas me retornando o ultimo registro… Como faço para me mostrar todos os resultados?
A cada iteração do for
você sobrescreve o valor de nome
, e no final ele só terá o nome do último.
O que você tem que fazer é guardar todos os nomes no array. Mas para isso você precisa criá-lo antes, e o tamanho do array deve ser o mesmo da lista de contas.
Estou assumindo que getContas()
retorna uma lista de FinBancosConta
:
// obtém a lista de FinBancosConta
List<FinBancosConta> contas = getContas();
// cria o array com o mesmo tamanho da lista
Object[] opcoes = new Object[contas.size()];
// adiciona todos os nomes no array
for (int i = 0; i < opcoes.length; i++) {
opcoes[i] = contas.get(i).getDsNick();
}
// pronto! :-)
Object res = JOptionPane.showInputDialog(null, "Escolha um item", "Selecao de itens",
JOptionPane.PLAIN_MESSAGE, null, opcoes, "");
Mas se getContas
retorna um array, basta mudar para:
FinBancosConta[] contas = getContas();
Object[] opcoes = new Object[contas.length];
for (int i = 0; i < opcoes.length; i++) {
opcoes[i] = contas[i].getDsNick();
}
A partir do Java 8, também dá para usar streams (ainda assumindo que getContas
retorna um List<FinBancosConta>
):
Object[] opcoes = contas.stream().map(FinBancosConta::getDsNick).toArray();
Mas se getContas
retorna um array, ficaria:
Object[] opcoes = Stream.of(getContas()).map(FinBancosConta::getDsNick).toArray();
2 curtidas
RESOLVIDO!!! Muito obrigado Hugo!
Alguma solução para que eu posso retornar os dados do item selecionado?
A variável res
terá o nome que foi escolhido. Então teria que percorrer a lista de contas e ver qual tem esse nome (se entendi direito o que vc quer)
Digo, como estou puxando um item do banco, quero retornar o id (item) selecionado, como seus atributos, agencia, conta…
Então acho que é isso mesmo, vc pega o res
(que é o nome que foi escolhido) e procura na lista qual tem o nome. Algo do tipo:
for (FinBancosConta conta : getContas()) {
if (conta.getDsNick().equals(res)) {
// "conta" é a que tem o nome escolhido, faz o que quiser com ela
}
}
1 curtida