ObjectComboBoxModel

4 11 2010

Essa classe está no projeto faz tempo mas nunca falei sobre ela pois ainda existe um problema que não vejo solução, ComboBox podem ser editaveis, e com esse model, não.

Mas pra quem só deseja exibir pode ser uma grande mão na roda.

Ele funciona da seguinte maneira, igual ao ObjectTableModel ele é paremetrizado e é necessario especificar qual o tipo do Objeto que vamos exibir na lista.

Nesse exemplo meu model será Person.

package model;

@SuppressWarnings("unused")
public class Person {
	private String name;
	private int age;

	public Person(String str, double d) {
		this.name = str;
		this.age = (int) d;
	}

	public String toString() {
		return "Name: " + name + " age: " + age;
	}
}

Até ai, nada demais, só o modelo.

Para utilizar precisamos criar um Formatter para essa classe, e o meu é o seguinte.

package combobox;

	public class PersonFormatter implements Formatter{
		@Override
		public Object format(Object arg0) {
			Person p = (Person) arg0;
			if(p == null)//No combo box o primeiro item sempre é null, para poder ficar em branco
				return "";
			return p.toString();
		}

		@Override
		public String getName() {
			return "person";
		}

		@Override
		public Object parse(Object arg0) {
			return null;//Nunca sera invocado
		}
	}

Nesse caso, format recebe um objeto Person, e deve retornar uma String que seja o conteudo que deve ser exibido no JComboBox.

E aqui como utilizar:

package combobox;

import java.util.*;
import javax.swing.*l;

import com.towel.awt.ann.*;
import com.towel.bean.Formatter;
import com.towel.swing.ObjectComboBoxModel;
import model.Person;

public class ComboBoxExample extends JFrame {
	private ObjectComboBoxModel<Person> model;
	@Action(method="showPerson")
	private JButton button;

	public ComboBoxExample(){
		super("ComboBoxModel");

		model = new ObjectComboBoxModel<Person>();
		model.setFormatter(new PersonFormatter());
		model.add(new Person("A",10.0));//  Igual ao ObjectTableModel
		model.add(new Person("B",20.0));//os métodos addAll adicionam todos os elementos de uma coleção no model
		model.add(new Person("C",30.0));//e o método setData coloca a coleção para ser os dados do model
		model.add(new Person("D",40.0));
		model.add(new Person("E",50.0));

		JComboBox combo = new JComboBox(model);

		JPanel cont = new JPanel();
		cont.add(combo);
		cont.add(button = new JButton("Show"));

		setContentPane(cont);
		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);

		new ActionManager(this);//Necessario para mapear @Action com o método
	}

	private void showPerson(){
		Person p = model.getSelectedObject();
		System.out.println(p.toString());
	}

	public static void main(String[] args) {
		new ComboBoxExample();
	}
}

Executando essa classe será exibida uma janela com um combo e um botao que quando pressionado mostrara na saida padrao o valor de Person.toString.

No exemplo também está com a anotação @Action, também do projeto, para entende-la ver este artigo.

About these ads

Ações

Information

One response

28 12 2010
ObjectComboBoxModel « MarkyHitchhiker's Blog

[…] Acesse com este novo link. […]

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 154 outros seguidores

%d blogueiros gostam disto: