Alterar valores de um jComboBox

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