Dúvida com JComboBox

6 respostas
R

Galera,

To começando a mexer aki com NetBeans + Java e to com uma duvida aki… seguinte:
Um comboBox em HTML de estados por exemplo, vc pod dizer que o valor de texto dele é SÃO PAULO mas o valor verdadeiro é 11
Algo assim:

<select name="estados"> <option value='11'>SÃO PAULO</option> </select>

Como fazer isso no java, pq estou tentando, mas soh consigo dar um valor único, ou digo q eh 11, ou digo q eh SÃO PAULO…

Rogério

6 Respostas

B

Ola

Amigo, todo componente Swing segue o padrão MVC, todos tem um view (Renderer), o controle, (Model), então vc pode fazer o seguinte, crie uma classe que represente este estado… dae vc adiciona estes objetos no combo, depois vc sobrescreva o renderer da combo, usando o renderer… dá uma olhada no link ae:

http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

jessetsilva

eu fiz o meu da seguinte forma e funciona direitinho, veja se ajuda:

PrintWriter pw =response.getWriter();
pw.println(" <select name ='estado'>");//ComboBox
pw.println("<option value='UNKNOWN'>Selecione o estado...</option>");
pw.println("<option value='0'>Rio Grande do Sul</option>");
pw.println("<option value='1'>Distrito Federal</option>");					
pw.println("<option value='2'>Amazonas</option>");						
pw.println("<option value='3'>Ceará, Maranhão e Piauí</option>");
pw.println("<option value='4'>Paraíba</option>");
pw.println("<option value='5'>Bahia e Sergipe</option>");
pw.println("<option value='6'>Minas Gerais</option>");
pw.println("<option value='7'>Rio de Janeiro</option>");
pw.println("<option value='8'>São Paulo</option>");
pw.println("<option value='9'> Paraná </option>");
   
 pw.println("</select><br/><br/>");	//Fim do ComboBox
R

Bruno, dei uma olhada nos exemplos e não entendi muito bem como pod me ajudar…
vou tentar da um exemplo melhor:
tenho no meu banco de dados 3 tabelas, EMPRESA, CONTAS e LANCTOS
EMPRESA
CODIGO
NOME

CONTAS
CODIGO
EMPRESA
NOME

LANCTOS
CODIGO
VALOR
CONTA

no meu sistema tenho uma tela de lançamento, e tenho o combobox de contas ond traz o NOME de todas as contas que estão cadastradas pra essa empresa.

quando clico em gerar lançamento, tenho q dar um insert na table LANCTOS, com o código da conta no campo CONTA, mas o meu combobox não tem o código e sim o NOME, qual a melhor forma de tratar isso??

Preciso mostrar pro usuário o NOME da conta, mas quando pego o valor que ele selecionou tenho q saber o código…

vlw

B

Ola,

Então... crie uma classe que represente estas contas:
public class Conta{
  private String nome;
  private Object codigo;
   ..... //os getters e setters
Legal, agora vamos imaginar que vc tem um metodo lá que recupera as contas no banco e te devolva uma lista de Conta, blz? Agora vc vai criar um renderer para tratar a conta na sua combo, pq afinal agora vc vai adicionar a lista de contas no seu combo... assim:
List<Conta> contas = .../// aquele metodo que recupera e retorna as contas
JComboBox myCombo = new JComboBox(contas.toArray());
Agora o renderer:
public class MyRenderer{
    public Component getListCellRendererComponent(
                                       JList list,
                                       Object value,
                                       int index,
                                       boolean isSelected,
                                       boolean cellHasFocus) {
        //Get the selected index. (The index param isn't
        //always valid, so just use the value.)
        if (isSelected) {
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());
        } else {
            setBackground(list.getBackground());[code]
            setForeground(list.getForeground());
        }
        if(Conta.class.isInstance(value)){
          this.setText((Conta)value).getNome());
        }
        return this;
    }
}





..... 

myCombo.setRenderer(new MyRenderer());  // aqui vc seta o renderer e pronto.

Legal, apartir de agora quando vc pegar o item selecionado só vc fazer um cast para Conta e vc terá o objeto inteiro... e não só mai so nome...

ps.: isto está na página do link que te passei.

R

Bruno,

segui um poko do seu raciocinio e adaptei para minha necessidade, mas estou com alguns problemas, criei a classe comboBox:

public class comboBox
{
    private static int codigo;
    private static String nome;
    public static void setCampos(String v_nome, int v_codigo)
    {
        nome = v_nome;
        codigo = v_codigo;
    }
    public static int getCodigo()
    {
        return codigo;
    }
    @Override
    public String toString()
    {
        return nome;
    }
}

E na minha tela faço o seguinte:

while(rs.next())
            {
                comboBox combo = new comboBox();
                combo.setCampos(rs.getString("conta"), rs.getInt("codigo")); 
                modeloBanco.addElement(combo);           
            }

Soh q qdo rodo o programa ele cria todos os valores do comboBox iguais, por exemplo:
Se no bd tenhu os banco BANCO DO BRASIL, ITAU e BRADESCO
No comboBox fica:
BANCO DO BRASIL
BANCO DO BRASIL
BANCO DO BRASIL

pq?

Vlw abs

B

Simples… os atributos da classe “combobox” são estaticos… tire o modificador static deles… dae vai funcionar.

Criado 14 de julho de 2008
Ultima resposta 14 de jul. de 2008
Respostas 6
Participantes 3