Vincular

Como faço pra vincular um combobox a um campo vazio e apos selecionar um dado do combo, mostrar o código em um campo vazio e travado?

DIGAMOS que você explicou mais detalhadamente e disse que está usando SWING e quer “vincular” o JComboBox a um JTextField.

Cria um evento para o JComboBox. Quando selecionar o item, o cara pega o texto selecionado e coloca dentro do JTextField. Um seuTextfield.setText("valor do comboBox"); basta

Agora, DIGAMOS que você explicou direito e disse que está usando JAVAFX e quer “vincular” o ComboBox a um TextField

Funciona basicamente da mesma forma. Mas tem os binds… Não sei se eles podem te atender nesse momento. Cria um evento pro ComboBox. Quando ele for clicado, pega o valor selecionado e coloca no TextField.

Em ambos os casos, é só mudar o TextField ou JTextField para editable(false)

Detalhes, detalhes!

Então… acontece o seguinte. eu tenho 2 colunas em uma tabela, uma coluna é a descrição e a outra o código. mas o código está ligado a descrição. quero que quando eu selecione uma das descrições, ele traga o código no textfield.

Apesar do Post vou tentar ser mais claro …

import javax.swing.JComboBox;

/**
 * Instancia combobox
 * @author vonquelbe.caldeira
 * @param codigo Código do combo
 * @param descr Descrição do combo que será exibida
 * @param ind Indice do código
 */
public class ComboLista {
    private String codigo;
    private String descr;
 //Construtores
    public ComboLista() {}
    public ComboLista(String codigo, String descr) {
        this.codigo = codigo;
        this.descr  = descr;
    }
    @Override
    public String toString () {return descr;}
    public String getDescr () {return descr;}
    public String getCodigo() {return codigo;}
/**
 * Retorna o indice do jComboBox
 * @param codigo
 * @param combo
 * @return 
 */ public static int getInd (String codigo, JComboBox combo) {
        for(int i=0;i<combo.getItemCount();i++){
            Object obj = (Object) combo.getItemAt(i);
            if (obj instanceof ComboLista){
                ComboLista item = (ComboLista) obj;
                if (item.getCodigo().equals(codigo)){
                    return i;
                }
            }
        }
        return -1;
    }
/**
 * Retorna o código do jComboBox
 * @param item
 * @return 
 */ public static String getCod (Object obj) {
        if (obj instanceof ComboLista){
            ComboLista item = (ComboLista) obj;
            return item.getCodigo();
        }
        return "";
    }
}

Analise o método acima … Quando crio o combo, preencho ele com um ArraysList desse meu método, ou seja, ele recebe um ArrayList do “ComboLista” que tem código e Descrição. O que é exibido no combo é a descrição porque eu reescrevi o método “ToString”.

Mas repare que tem dois métodos ainda o "getInd e o “getCod” … quando quero saber qual o indice de determinado código eu uso o “getInd” que recebe como parametro o código e o próprio ComboBox e ele me retorna o Indice que uso pra exibir a descrição no combobox com o método “setSelectedIndex”.
Já o “getCod” recebe o indice atual do Comobox (getSelectedItem) e verifico se esse objeto é do tipo ComboList, se for faço a conversão e retorno o código.

Forma de usar:

JComboBox combo = new JComboBox(new ComboLista[] {new ComboLista("RJ", "Rio de Janeiro"),
                                                  new ComboLista("SP", "São Paulo"),
                                                  new ComboLista("MG", "Minais Gerais"),
                                                  new ComboLista("ES", "Espírito Santo"),
                                                 });
combo.setBounds(300,88,160,20);
tela.add(combo);

É claro que geralmente uso um método para criar esse arrayList, só coloquei os estados como exemplo.

Exibindo no combo e retornando o código:

combo.setSelectedIndex(ComboLista.getInd("SP", combo));
System.out.println(ComboLista.getCod(combo.getSelectedItem()));
1 curtida

Entendi. Mas meu combo eu utilizo ele já direto do banco. segue o código.

>         this.CadTPETeste1.removeAllItems();
>         try {
>             Class.forName(driver);
>             Connection con = DriverManager.getConnection(url, user, pass);
>             Statement Sent = con.createStatement();
>             ResultSet rs = Sent.executeQuery("Select * from Testes");
>             while (rs.next()) {
>                 this.CadTPETeste1.addItem(rs.getString("DTESTE"));
>             }
>         } catch (Exception e) {
>             JOptionPane.showMessageDialog(null, e);
>         }

ao fazer o cadastro de um teste, a pessoa tem q cadastrar um código para o teste exemplo: Teste de Espessura (TDE) e com isso na outra tela, quando a pessoa selecionar esse teste, quero q apareça o código dele em um jtextfield.

Entendi …

Então cria um “Action” para o seu ComboBox

ActionListener act = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
   // Exibe a Descrição
      seuJTextField.setText(combo.getSelectedItem().toString()); 
   // Exibe o Código
   //   seuJTextField.setText(ComboLista.getCod(combo.getSelectedItem())); 
    }
};
combo.addActionListener(act);

Cada vez que vc mudar o combo … será exibido no seu Jtext a descrição ou o Código …

Boa noite Vonquelbe!

fiz oq você disse, mas não estou conseguindo colocar para aparecer o código. a descrição deu certo, mas o código não.

ActionListener act = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Exibe a Descrição
// teste2.setText(teste1.getSelectedItem().toString());
// // Exibe o Código
txtteste.setText(ComboLista.getCod(comboteste.getSelectedItem()));
}
};
comboteste.addActionListener(act);

Não entendi oq seria esse “ComboLista”… e mais uma duvida para entender a logica, como que ele pegaria o valor do código que está apenas em uma coluna da tabela? “o código em minha tabela é chave primaria”

Então: Analise o seu código

while (rs.next()) {
       this.CadTPETeste1.addItem(rs.getString("DTESTE"));
}

O que vc esta fazendo é incluir em cada índice do seu combo a descrição, e só, não tem código.
Cada índice do combo recebe um objeto, então entenda que o tipo “String” é um objeto.
ComboLits é o objeto (método) que criei para cada indice do meu comboBox, nele eu tenho código e descrição.

JComboBox combo = new JComboBox(new ComboLista[] {new ComboLista("RJ", "Rio de Janeiro"),
                                                  new ComboLista("SP", "São Paulo"),
                                                  new ComboLista("MG", "Minais Gerais"),
                                                  new ComboLista("ES", "Espírito Santo"),
                                                 });

Entendeu ? … o meu comboList esta recebendo um objeto do tipo ComboList que tem o que ? Código e descrição. Eu recomendo que vc use o método “ComboList” que coloquei em cima, que alem de já ter a estrutura com código e descrição ainda tem as rotinas para recuperar o indice e o código. Da uma analisada no que já postei.