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()));
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.