java - setar - setselecteditem
Ouvinte de mudança de seleção JComboBox? (4)
Aqui está criando um ComboBox adicionando um ouvinte para a mudança de seleção de itens:
JComboBox comboBox = new JComboBox();
comboBox.setBounds(84, 45, 150, 20);
contentPane.add(comboBox);
JComboBox comboBox_1 = new JComboBox();
comboBox_1.setBounds(84, 97, 150, 20);
contentPane.add(comboBox_1);
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
//Do Something
}
});
}
Eu estou tentando obter um evento para disparar sempre que uma escolha é feita a partir de um JComboBox
.
O problema que estou tendo é que não há nenhum método addSelectionListener()
óbvio.
Eu tentei usar actionPerformed()
, mas nunca é acionado.
Curto de substituir o modelo para o JComboBox
, estou sem ideias.
Como eu sou notificado de uma mudança de seleção em um JComboBox
? **
Edit: Eu tenho que me desculpar. Acontece que eu estava usando uma subclasse do JComboBox
, mas vou deixar a questão em JComboBox
, já que sua resposta é boa.
Ele deve responder aos ActionListeners , assim:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@John Calsbeek corretamente aponta que addItemListener()
também funcionará. Você pode obter 2 ItemEvents
, no entanto, um para a desmarcação do item selecionado anteriormente e outro para a seleção do novo item. Apenas não use os dois tipos de eventos!
Exemplo de ItemListener
implementação de ItemListener
class ItemChangeListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
Object item = event.getItem();
// do something with object
}
}
}
Agora vamos obter apenas o item selecionado.
Em seguida, basta adicionar o ouvinte ao seu JComboBox
addItemListener(new ItemChangeListener());
Recentemente, eu estava procurando por essa mesma solução e consegui encontrar uma simples, sem atribuir variáveis específicas para o último item selecionado e o novo item selecionado. E essa pergunta, embora muito útil, não forneceu a solução que eu precisava. Isso resolveu meu problema, espero que resolva o seu e os outros. Obrigado.