Dúvida JComboBox e List [RESOLVIDO]

9 respostas
Pedrosa

Galera tenho um método que me retorna uma lista:

List list = new ArrayList();
while (rs.next()) {
    list.add(rs.getString("vdn_numero"));
    list.add(rs.getString("vdn_label"));
}

Na hora da iteração preciso exibir somente o segundo item dessa lista e o primeiro ficaria como um código.

VdnDAO vdn = new VdnDAO();
List listaVdn = vdn.getVdn();
for(Iterator iter = listaVdn.iterator(); iter.hasNext();){
    String valor = (String) iter.next();
    cmbTransferencia.addItem(valor);//esta jogando os 2 valores
}

Como ocultar esse código?

Preciso de algo como descrição no html, onde meu codigo jogaria na value e texto somente para o usuario ver, mas quando pego o valor via cmbTransferencia.getSelectedItem(), ele traz os 2 valores da descrição e o codigo.

9 Respostas

dudaskank

acredito que vc precisaria aqui de um VO:

class VdnVO { String codigo; String descricao; // gets, sets e um construtor com os 2 campos }

aí, no seu DAO, criaria a lista assim:

aí é pegar o seu VO e adicionar o que vc quer com seu get correspondente…

espero ter ajudado, flw

Pedrosa

Eu tava usando um vo mas e ocorreram problemas de cast, mas como jogar esses valores na combo e exibir somente o de descrição p usuario mas na hora de gravar pegar o código ?

dudaskank

é… isso eu ainda não sei hehehe… vou ver se descubro.

dudaskank

puxa, mais fácil do que pensei... bom, se vc colocar como vo no combo, aparece o nome da classe @ um monte de número né?

então, basta vc sobrescrever o método toString() do seu vo para ele retornar o nome. para pegar o que estiver no combo, basta usar o getSelectedItem() do JComboBox memso.

segue o meu teste aqui:

TesteCombo.java
package teste.eduardo;

import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.JFrame;

public class TesteCombo extends JFrame {
	private static final long serialVersionUID = 1L;
	JComboBox combo;

	static Vector vos;
	static {
		vos = new Vector();
		vos.add(new TesteComboVO(1, "Zé 1"));
		vos.add(new TesteComboVO(2, "Zé 2"));
	}

	public TesteCombo() {
		super();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		combo = new JComboBox(TesteCombo.vos);
		combo.addActionListener(new TesteComboAction());
		getContentPane().add(combo);
		pack();
	}

	public static void main(String[] args) {
		TesteCombo teste = new TesteCombo();
		teste.setVisible(true);
	}

}
TesteComboVO.java
package teste.eduardo;

public class TesteComboVO {
	int id;

	String nome;

	public TesteComboVO(int id, String nome) {
		super();
		this.id = id;
		this.nome = nome;
	}

	public TesteComboVO() {
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	public String toString() {
		return getNome();
	}
}
TesteComboAction.java
package teste.eduardo;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JComboBox;

public class TesteComboAction extends AbstractAction {

	private static final long serialVersionUID = 1L;

	public void actionPerformed(ActionEvent e) {
		JComboBox combo = (JComboBox) e.getSource();
		TesteComboVO vo = (TesteComboVO) combo.getSelectedItem();
		System.out.println(vo.getId() + " - " + vo.getNome());
	}
}

agora vai! hehehe

esse teste abre uma janela com um combo, ao clicar em um dos itens, a Action escreve na saída padrão o id e o nome do indivíduo selecionado :)

Pedrosa

Tentei usar o VO no meu DAO e continua dando problema de cast

public List<VdnVO> getVdn() throws SQLException {
		strSQL = "select * from vdn";
        
        PreparedStatement stmt = this.connection.prepareStatement(strSQL);
		ResultSet rs = stmt.executeQuery();
	
		List <VdnVO>list = new ArrayList<VdnVO>();
		while (rs.next()) {
			VdnVO vdnvo = new VdnVO();
			vdnvo.setVdnNumero(rs.getString("vdn_numero"));
			vdnvo.setVdnLabel(rs.getString("vdn_label"));
			list.add(vdnvo);
		}
		rs.close();
		stmt.close();
		return list;
	}

e na hora de popular a combo

List listaVdn = vdn.getVdn();
        for(Iterator iter = listaVdn.iterator(); iter.hasNext();){
        	String valor = (String) iter.next();
        	cmbTransferencia.addItem(valor);
        }

Esta causando a seguinte Exception

java.lang.ClassCastException:br.com.wittel.model.VdnVO
	at br.com.wittel.view.Transferencia.initComponents(Transferencia.java:57)
	at br.com.wittel.view.Transferencia.<init>(Transferencia.java:22)
	at br.com.wittel.view.Principal.btnTransferenciaActionPerformed(Principal.java:520)
	at br.com.wittel.view.Principal.access$5(Principal.java:518)
	at br.com.wittel.view.Principal$6.actionPerformed(Principal.java:274)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Mas se coloco meu o meu dao sem vo ele popula normal list.add(rs.getString("vdn_numero")); list.add(rs.getString("vdn_label"));

Qual o motivo dessa exception de cast?

Matheus_Tardivo

Faça isso:

List listaVdn = vdn.getVdn(); for(Iterator iter = listaVdn.iterator(); iter.hasNext();){ cmbTransferencia.addItem(iter.next()); }
Ou melhor:

JComboBox cmbTransferencia = new JComboBox(vdn.getVdn().toArray());
[edit]
Só não se esqueça de sobrescrever o método toString() do seu VO para mostrar o que você deseja no JComboBox.
[/edit]

:arrow: Veja: http://www.guj.com.br/posts/list/35039.java

Pedrosa

Não consegui entender meu VO esta assim:

public class VdnVO {
	private String codVdn;
	private String skillNumero;
	private String skillNome;
	private String vdnNumero;
	private String vdnStatus;
	private String vdnLabel;
	
	
	public String getCodVdn() {
		return codVdn;
	}
	public void setCodVdn(String codVdn) {
		this.codVdn = codVdn;
	}
	public String getSkillNome() {
		return skillNome;
	}
	public void setSkillNome(String skillNome) {
		this.skillNome = skillNome;
	}
	public String getSkillNumero() {
		return skillNumero;
	}
	public void setSkillNumero(String skillNumero) {
		this.skillNumero = skillNumero;
	}
	public String getVdnLabel() {
		return vdnLabel;
	}
	public void setVdnLabel(String vdnLabel) {
		this.vdnLabel = vdnLabel;
	}
	public String getVdnNumero() {
		return vdnNumero;
	}
	public void setVdnNumero(String vdnNumero) {
		this.vdnNumero = vdnNumero;
	}
	public String getVdnStatus() {
		return vdnStatus;
	}
	public void setVdnStatus(String vdnStatus) {
		this.vdnStatus = vdnStatus;
	}
	
}

Só não se esqueça de sobrescrever o método toString() do seu VO para mostrar o que você deseja no JComboBox

Em que lugar eu faria isso?

Pedrosa

Rolou!

aguiaMen

Quero agradecer estas postagens pois foi muito util para mim.

Criado 10 de julho de 2006
Ultima resposta 28 de jul. de 2008
Respostas 9
Participantes 4