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.
[...] Acesse com este novo link. [...]