Bom dia,
Estou criando uma jFrame Java, e nessa gui queria que o jComboBox pegasse valores de um array a cada click.
Exemplo: números pares - 2,4,6 / impares - 1,3,5.
Assim a cada click quando fosse abrir a listagem de opções do jComboBox ele estivesse preenchido com esses valores.
Pelo que entendi, é da seguinte forma:
-
Defino dois DefaultComboBoxModel();
-
Defino uma variavel boolean global responsável por alterar a ordem;
-
Defino o seguinte função no construtor:
jComboBox1.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { } public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { } public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { evento(evt); } });
Assim você coloca o seguinte metodo:
// Quando abrir o popup ele irá trocar a ordem dos itens
private void evento(javax.swing.event.PopupMenuEvent evt) {
jComboBox1.setModel((ordem) ? defaultModel : defaultModel2);
ordem = !ordem;
}
Não se esqueça de adicionar os items no modelo do combobox, fiz da seguinte forma no construtor:
for (int i = 0; i < 10; i++) {
defaultModel.addElement(String.valueOf(i));
i++;
}
for (int i = 1; i < 11; i++) {
defaultModel2.addElement(String.valueOf(i));
i++;
}
A definição é:
Puxar os produtos vendidos pelo vendedor, pegar a listagem de produtos e cada produto virar uma opção do jComboBox. Isso com a ajuda do banco de dados, utilizando resultset e array/arraylist.
Obrigado desde já pela ajuda.
É bem simples, mas depende da forma que você vai tratar as opções do combobox.
-Se vc quer tratar cada opção como uma String, não tem segredo, remove todos os itens e adiciona os novos;
-Se vc for tratar como um objeto “Produto”, deve-se implementar da seguinte forma:
public NewJFrame() {
initComponents();
jComboBox1.setModel(new DefaultComboBoxModel());
List<Produto> listaProduto = new DAO().getProdutos(); // O DAO é minha classe de comunicação com o BD
for (Produto produto : listaProduto) {
((DefaultComboBoxModel) jComboBox1.getModel()).addElement(produto); // Adiciono o Objeto
}
}
Para alterar os Itens do ComboBox vc irá usar esse método:
public void alteraItensComboBox(List<Produto> produtos) {
((DefaultComboBoxModel) jComboBox1.getModel()).removeAllElements();
for (Produto produto : produtos) {
((DefaultComboBoxModel) jComboBox1.getModel()).addElement(produto);
}
}
Para pegar um Objeto do ComboBox deve-se usar o seguinte código:
Produto produto= (Produto)((DefaultComboBoxModel) jComboBox1.getModel()).getSelectedItem();
Muito obrigado. Entendi no caso de eu colocar como se fosse um acumulador, que no caso toda vez que o estado do jComboBox ele pegar o valor é só colocar o event puxando o nome (valor) que o jComboxBox possui né?
Sabe me informar se tem como criar um arquivo de configuração que no caso eu possa atribuir categorias(grupos) e itens para essa categoria:
Material de escritório possui: caneta, disquete, computador. (A empresa mudou o item disquete para pen-drive).
Agora sendo: caneta,pen-drive,computador.
Assim o Jar ele puxa na sua inicialização um arquivo de configuração de itens ou alteração de itens. E assim o próprio usuário alimenta ele com as categorias existentes no sistemas e seus itens…
Isso é relacionamento de itens no BD.
Tabela “Material” (id, nomeMaterial, tag, idGrupo);
Tabela “Grupo” (id, nome);
Tabela “Itens” (id, nomeItem, tipo…);
Tabela “ItensXMaterial” (id, idMaterial, idItem, idUsuario); Isso permite ter mais de um material para mais um item
No seu select vc buscara pelo nome do item atualizado, por exemplo:
SELECT a.*, b.nomeMaterial, c.nomeItem
FROM ItensXMaterial a
INNER JOIN material b on a.idMaterial = b.id
INNER JOIN Itens c on c.id = a.idItens
WHERE idUsuario = 123;
É porque o BD que trabalho é de uma empresa terceira, e não pode ter alteração nessa estrutura. Assim eu pensei em pegar os valores de uma váriavel de um arquivo externo. E poder tamtém salvar esses valores para que se possa ter a manuntenibilidade do sistema. Teria como exportar/importar esse arquivo e juntamente o jar puxar os valores desse arquivo.
Se vc está trabalhando com informação, o melhor é usar BD, até porque, usar arquivos como csv ficaram expostos. Mas se isso não é problema para sua aplicação, recomendo criar documentos csv que representem tabelas, separados os campos por “;”. O funcionamento será o mesmo.
O problema é como o sistema pode se retroalimentar dele, pois no caso a aplicação em Java(Jar) precisa tanto ler eles quanto gravar dados nele. Pois desejo criar um executável e juntamente com ele um arquivo de “categorização” de produtos.
Se vc vai usar CSV, saiba que não será possível gravar dados enquanto outro usuário estiver com o arquivo aberto. O sistema é simples, leitura txt:
Lê a linha;
Usa split(";") para quebrar por ";"
E reconhece cada item pelo índice dessa quebra;
Ok, como eu poderia fazer com que o Java se baseasse nesse arquivo para atribuir valores as variáveis. Tipo a variavel categoria1 = valor da categoria1 no excel? Ou até mais facilmente um txt, onde precisa somente procurar as categorias pelas linhas com o uso de um if.
Assim, no Java vc representa um Material (por exemplo) como um Objeto, uma classe. Essa classe possui atributos, ou características, como por exemplo:
public class Material {
// Atributos
private Integer idMaterial;
private Color corMaterial;
private String nomeMaterial;
private Grupo grupoPertencente;
public Material(){ // construtor
}
// GETTERS E SETTERS ABAIXO
}
Digamos que no BD a tabela material possua os seguintes dados:
- Material 1 : ID=1 , NOME=“Lápis”, COR=“Azul”, IDGRUPO=“3”;
- Material 2 : ID=2 , NOME=“Bloco de Notas”, COR=“Branco”, IDGRUPO=“3”;
Definido a classe e recuperado os itens no BD, você iria buscar o arquivo CSV, ele teria o seguinte formato:
- 1;;;2
- 2;Notepad;;2
Separando os itens por “;”, eu consigo identificar que o item 1 possui o grupo 2 ao invés do 3, logo, eu edito apenas ele usando o set da classe, também consigo identificar que o item 2, possui a descrição “Notepad” ao invés de “Bloco de Notas”.
O segredo está na ordem que vc executa as coisas, primeiro o BD, depois olha no bloco de notas o que está diferente com base em um ID que identifica o item.
Perfeito, saberia me informar se quando eu construir o Jar da aplicação eu posso utilizar a planilha por fora? Ou ela vai ficar na dist do arquivo. Caso queira acessar/modificar o csv.
Ela deverá ficar no local especificado dentro da aplicação