Popular JComboBox com Vector

2 respostas
wbdsjunior

Fala galera!

Estou com um problemão.

Sou inciante em java, peguei um software mal feito para terminar e nunca usei um Vector.

Abaixo o código que está me deixando de cabelo em pé:

Vector codigoGatilho = new Vector();

Vector descricaoGatilho = new Vector();

private JComboBox getJCmbBoxTipoGatilho() {

	jCmbBoxTipoGatilho = new JComboBox();
	PreparedStatement pS;
	String s = new String("select * from gatilho order by descricao");
	ResultSet rS;
	try {

		pS = ConectaBanco.conn.prepareStatement(s);
		rS = pS.executeQuery();
		while (rs.next()) {

			codigoGatilho.add(rS.getInt("codigo"));
			descricaoGatilho.add(rS.getString("descricao"));
			jCmbBoxTipoGatilho.addItem(descricaoGatilho.lastElement());
		}
		pS.close();
		rS.close();
	} catch (Exception e) {

		...
	}
	jCmbBoxTipoGatilho.setSelectedIndex(0);
	return jCmbBoxTipoGatilho;
}

Depois esse JComboBox é adicionado à um JTable.

Perguntas:

Por quê será que ele usa 2 Vectors (um para armazenar o código e outro para a descrição)? A ideia não seria ter 1 Array ou coisa do tipo para armazenar o codigo e a descrição?

Como faço para pegar o código do item selecionado no JComboBox?

Há um jeito melhor de fazer isso? Se sim, agradeço se alguém puder me dar a solução. Andei pesquisando um pouco, mas não consegui fazer.

Desde já agradeço a colaboração.

2 Respostas

T

a) Em um JComboBox (e em seu equivalente em .NET), você o preenche com uma lista de objetos e o JComboBox chama o método toString de cada um deles (no .NET é ToString).
O que seria correto, na verdade, é criar uma classe boba com 2 campos - código e descrição - cujo método public String toString() retorne a descrição - e preencher o JComboBox com elementos dessa classe.
Mas como o autor original não sabia disso, ele fez esse tipo de coisa e pôs 2 vetores em paralelo.
b) Javadoc nele! [url=http://java.sun.com/javase/6/docs/api/javax/swing/JComboBox.html#getSelectedIndex()]getSelecte4dIndex[/url

wbdsjunior
thingol:
a) Em um JComboBox (e em seu equivalente em .NET), você o preenche com uma lista de objetos e o JComboBox chama o método toString de cada um deles (no .NET é ToString). O que seria correto, na verdade, é criar uma classe boba com 2 campos - código e descrição - cujo método public String toString() retorne a descrição - e preencher o JComboBox com elementos dessa classe. Mas como o autor original não sabia disso, ele fez esse tipo de coisa e pôs 2 vetores em paralelo. b) Javadoc nele! [url=http://java.sun.com/javase/6/docs/api/javax/swing/JComboBox.html#getSelectedIndex()]getSelecte4dIndex[/url

thiagol!

Obrigado pela ajuda.

Resolvi da seguinte forma:

public List tipoGatilho = new ArrayList();

private JComboBox getJCmbBoxTipoGatilho() {

	jCmbBoxTipoGatilho = new JComboBox();

	Statement s;
	String query = new String("select * from gatilho order by descricao");
	ResultSet rS;
	try {

		s = Principal.ConectaBanco.conn.createStatement();
		rS = s.executeQuery(query);
		while (rS.next()) {

			tipoGatilho.add(new TipoGatilhoEvento(rS.getInt("codigo"), rS.getString("descricao")));
		}
		s.close();
		rS.close();

	} catch (Exception e) {
		...
	}

	for (int i = 0; i < tipoGatilho.size(); i++) {

		jCmbBoxTipoGatilho.addItem(tipoGatilho.get(i).toString());
	}
	jCmbBoxTipoGatilho.setSelectedIndex(0);
	return jCmbBoxTipoGatilho;
}
public class TipoGatilhoEvento {

	private int codigo;
	private String descricao;

	public TipoGatilhoEvento(int codigo, String descricao) {

		this.codigo = codigo;
		this.descricao = descricao;
	}

	public int getCodigo() {

		return codigo;
	}

	public void setCodigo(int codigo) {

		this.codigo = codigo;
	}

	public String getDescricao() {

		return descricao;
	}

	public void setDescricao(String descricao) {

		this.descricao = descricao;
	}

	public String toString() {

		String s = this.descricao;
		return s;
	}
}

Está correto?

Como faço para pegar o código depois de escolhido o item no JComboBox?

Obrigado.

Criado 17 de abril de 2008
Ultima resposta 18 de abr. de 2008
Respostas 2
Participantes 2