Ae Gustavo, essa classe é do PLAF.
Quer dizer que a intenção dela é permitir trocar o Look And Feel de Popups genéricos, como JComboBoxes e JPopupMenus. Por isso vc não consegue acessar muita coisa de lá mesmo… : )
Tive lendo de novo o ComboBoxModel, confirma pra mim se vc tá com essas propriedades valendo:
- getSize() devolve o tamanho da sua janela (200);
- getElementAt(index) devolve o elemento relativo (top + index);
Vc precisa de 2 camadas: um model-swing e um model-model. Num deles, vc obedece às exigências do swing. no outro, vc faz a paginação. por isso o metodo acima seria assim:
public Object getElementAt(int index) {
return innerModel.getElementAt(top + index);
}
No seu innerModel, vc faz o que vc fez antes e não deu certo, tomando cuidado pra mudar o “top” conforme necessário. Acho que funciona. Daí vc vai ter 200 caras visíveis, mais uns 100 carregados no inner e o resto no banco! Quando vc pedir um cara dentro da borda, o innerModel faz o seguinte:
public Object getElementAt(int index) {
if (index < teto) {
carregaAnteriores();
}
return elements.get(index - teto);
}
protected void carregaAnteriores() {
elements.delete(MEIA_JANELA, elements.size());
elements.addAll(0, carregaDoBanco(teto - MEIA_JANELA, MEIA_JANELA));
teto -= MEIA_JANELA;
}
Na verdade, vc vai precisar não só te um teto, mas de 4 indices no seu innerModel:
- zero: 0
- top: zero + MEIA_JANELA;
- bottom: top + MEIA_JANELA * 2;
- end: <tamanho do resultset>
MEIA_JANELA é uma constante que define metade da sua janela.
Será que eu viajei demais??
Abração!!