Combobox dinâmico

1 resposta
L

Pessoal estou com a seguinte dúvida…

Qual a melhor maneira de se implementar, isto é…qual seria mais viável…
para gerar um combobox dinâmico… pois meu combobox tem a seguinte ação… ao digitar a primeira letra nele, ele lista todos os produtos que começam com a letra digitada, ao digitar a segunda, lista todos os produtos que tem as duas primeiras letras iguais as digitadas e assim por diante

Rotina 1
ao abrir a tela, é buscado todos os produtos no banco e adicionado no combo então todos ficam sempre dentro do combo

Rotina 2
ao abrir a tela, não é buscado nada, somente faz uma consulta quando o usuário digita uma letra no combo daí busca e lista no combo…

Qual seria a melhor maneira???
Eu tenho no meu sistema a rotina 1 implementada, só o problema é que comecei a fazer testes aqui, inserindo uns 20.000 produtos, depois quando vou abrir a tela,ja viu né…demora,demora,demora…
E quando inseri 50.0000 produtos,nem abre…dá estouro de memória…
Será que teria uma maneira de paginar no combo ou tenho que abandonar essa Rotina 1 e fazer como descrito na Rotina 2…o problema da rotina 2 é que cada letra digitada é uma consulta no banco…

1 Resposta

C

eu usaria JList(com jscrollpanel) com paginaçao de 50 em 50 produtos(com botao "proximos 50")

exemplo
package p240332;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;

public class Tela extends JFrame {

    private JList jList;
    private JScrollPane jScrollPane;

    private JButton prox;
    private JButton ant;

    private String[][] listaProdutos = {
        {"prod01","prod02","prod03","prod04","prod05"},
        {"prod11","prod12","prod13","prod14","prod15"},
        {"prod21","prod22","prod23"}};

    private int indicePagina;
    private int qtdPaginas;

    public Tela() {
        init();
        indicePagina = 0;
        qtdPaginas = listaProdutos.length;//3 pag
    }

    private void init() {
        jList = new JList();
        jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//seleciona somente 1

        jScrollPane = new JScrollPane(jList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        jList.setListData(listaProdutos[indicePagina]);

        prox = new JButton("Proximos 50");
        prox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                indicePagina = Math.min(qtdPaginas - 1, indicePagina + 1);
                jList.setListData(listaProdutos[indicePagina]);
            }
        });

        ant = new JButton("50 anteriores");
        ant.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                indicePagina = Math.max(0, indicePagina - 1);
                jList.setListData(listaProdutos[indicePagina]);
            }
        });
        
        getContentPane().setLayout(new GridLayout(3, 1));
        getContentPane().add(jScrollPane);
        getContentPane().add(prox);
        getContentPane().add(ant);
    }

    public static void main(String[] args) {
        Tela t = new Tela();
        t.pack();
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.setVisible(true);
    }
}

no caso de usar busca, o ideal é q seja feito pelo bd, acho q o bd tambem faz pagina de busca

Criado 29 de abril de 2011
Ultima resposta 2 de mai. de 2011
Respostas 1
Participantes 2