Ir para conteúdo
Faça parte da equipe! (2024) ×

Como implementar um ComboBoxModel em Java


'php
 Compartilhar

Posts Recomendados

Este é um exemplo bem básico, mas bem proveitoso, vamos começar pela classe modelo, que é a classe que representa seu objeto, geralmente são os dados que serão persistidos.

OBS: Tomem cuidado com packages.

Um tópico fácil, simples e bem resumido, não tratei erros como, por exemplo, não remover um item do JComboBox quando a lista já estiver vazia, por que esse não é intuito do tutoria

 

Classe Estado (Modelo)

 

package br.com.combox.modelo;

 

É necessário se cadastrar para acessar o conteúdo.

 

Acabamos de criar a classe que será repre        no nosso JComboBox, nada além do que não conhecemos, uma classe com atributos e seus getters e setters. Para não deixar nenhum código muito confuso ou com muitas obrigações, criei uma classe apenas para nos auxiliar na criação e preenchimento de um List, sendo assim vamos criar uma classe chamada ControlEstados.

 

 

 

Classe ControlEstados (Auxiliar)

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Esta classe apenas tem um construtor sem parâmetros que instancia o nosso List, e um método que configura este List com vários estados.

 

Agora vem a parte que mais nos interessa, o nosso ComboModel. O que precisamos saber é que teremos que implementar (implements) a interface ComboBoxModel que por sua vez estende (extends) a também interface ListModel<E>. Antes de começarmos irei explicar um pouco dessas duas (2) interfaces.

 

 

Na interface ComboBoxModel existem apenas dois (2) métodos a serem implementados:

 

É necessário se cadastrar para acessar o conteúdo.

 

Este método é usado pelo próprio componente JComboBox para setar (configurar) o objeto que está selecionado.

 

É necessário se cadastrar para acessar o conteúdo.

 

Este método é usado pelo próprio componente JComboBox para getar (retornar) o objeto que está selecionado.

Já na interface ListModel (que é estendida pela interface ComboBoxModel) existem quatro (4) métodos, dos quais teremos que implementar apenas dois (2), um deles é o método:

 

É necessário se cadastrar para acessar o conteúdo.

 

Este método recebe um int como parâmetro que será usado como índice para retornar o objeto da lista.

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Já este método retorna um int que é total de itens no nosso JComboBox.

Estes são os métodos que teremos que implementar e os principais para que nosso ComboBoxModel funcione da maneira que queremos.

 

 

Além de implementar a interface que citei acima devemos estender (extends) a classe abstrata AbstractListModel<E> que também implementa a interface ListModel. Lembram daqueles dois (2) métodos que disse que não precisaríamos implementar, pois é, não precisamos por que estendemos esta classe que já os implementam.

 

Precisamos estender essa classe por que precisamos de três métodos dessa classe, são eles:

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Responsável por atualizar por inteiro o conteúdo do JComboBox.

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Responsável por atualizar o intervalo de dados que foram inseridos no JComboBox.

 

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Responsável por atualizar o intervalo de dados que foram removidos no JComboBox

Esses métodos não precisamos implementar, pois eles já estão prontos para serem usados, iremos apenas chama-los quando atualizamos os dados do JComboBox, seja atualizar, remover ou inserir.

 

 

Vamos para os detalhes da classe que será nosso ComboBoxModel.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Começamos declarando os atributos composto por um List que será nossa lista de estados, e também um atributo selectedEstado do tipo Estados para que seja guardado o objeto que esta selecionado no componente JComboBox. Criei também uma constante para representar o primeiro item da lista, somente para não parecer números “fantasmas” no nosso código.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Criaremos dois (2) construtores, um sem parâmetros do qual instanciamos a nossa lista, e outro que recebe um List que adicionamos na lista principal. Reparem que chamamos o método “setSelectedItem” para selecionar o primeiro objeto da lista.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Este método usaremos para retornar um objeto da lista conforme índice que foi passado pelo parâmetro.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Neste método apenas retornamos o tamanho da lista.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Retornamos o atributo “selectedEstado” que é o responsável por guardar o objeto selecionado no componente JComboBox.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

Setamos o atributo “selectedEstado” que é o responsável por guardar o objeto selecionado no componente JComboBox.

 

 

Estes métodos visto até aqui são os que devemos implementar, agora veremos alguns métodos que foram incluídos para que possamos incluir um ou mais objeto, remover e atualizar um ou mais objeto também.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Método para adicionarmos um item na lista, reparem que a partir deste precisamos chamar os métodos da classe AbstractListModel para atualizar a lista do componente, neste caso como estamos adicionando usamos o fireIntervalAdded.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Outro para adicionar Estados, porém este adiciona uma lista.

 

 


public void removeEstado() {
listEstados.remove(getSelectedItem());
fireIntervalRemoved(this, FIRSTINDEX, getSize() - 1);
setSelectedItem(listEstados.get(FIRSTINDEX));
}
É necessário se cadastrar para acessar o conteúdo.

 

E por ultimo um que limpa todos os objetos da lista.

 

 

 

Vamos para o código da classe, como ficou no final.

 

 

 

Classe EstadosComboModel (ComboBoxModel)

 


package br.com.combox.model;

import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;

import br.com.combox.modelo.Estados;

public class EstadosComboModel extends AbstractListModel<Object> implements ComboBoxModel<Object> {

private List<Estados> listEstados;
private Estados selectedEstado;
private final static int FIRSTINDEX = 0;

public EstadosComboModel() {
this.listEstados = new ArrayList<Estados>();
}

public EstadosComboModel(List<Estados> listEstados) {
this();
this.listEstados.addAll(listEstados);
if (getSize() > 0) {
setSelectedItem(this.listEstados.get(FIRSTINDEX));
}
}

@Override
public Object getElementAt(int index) {
return listEstados.get(index);
}

@Override
public int getSize() {
return listEstados.size();
}

@Override
public Object getSelectedItem() {
return selectedEstado;
}

@Override
public void setSelectedItem(Object anItem) {
selectedEstado = (Estados) anItem;
}

public void addEstado(Estados estado) {
listEstados.add(estado);
fireIntervalAdded(this, getSize() - 1, getSize() - 1);
setSelectedItem(listEstados.get(getSize() - 1));
}

public void addListEstado(List<Estados> estados) {
int primeiraLinha = getSize();
listEstados.addAll(estados);
fireIntervalAdded(this, primeiraLinha, primeiraLinha + estados.size());
setSelectedItem(listEstados.get(getSize() - 1));
}

public void removeEstado() {
listEstados.remove(getSelectedItem());
fireIntervalRemoved(this, FIRSTINDEX, getSize() - 1);
setSelectedItem(listEstados.get(FIRSTINDEX));
}

public void clear() {
listEstados.clear();
fireContentsChanged(this, FIRSTINDEX, getSize() - 1);
}
}
É necessário se cadastrar para acessar o conteúdo.

 

Agora é só passar esse render para o componente JComboBox dessa maneira. (Veremos na classe com o frame.

 

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Agora veremos a classe responsável pela interface gráfica com o JFrame, não irei entrar em detalhes nesta classe, postarei para que possa ser testado e estudado por todos que se interessarem pelo tutorial.

 

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Bom, então é isso, espero que tenham gostado.

 

Créditos: André, 'php

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.