Detectar uma alteração de estado JRadioButton
-
07-07-2019 - |
Pergunta
Como posso detectar quando um JRadioButton é alterada de 'não selecionado' para 'selecionado' quando clicado com o mouse? Eu tentei usar um ActionListener no botão, mas que é demitido cada vez que o botão de opção é clicado, não apenas quando ele está mudando de estado para 'selecionados'.
Eu tenho pensado de manter uma variável booleana que lembra o estado do botão, e testá-lo dentro do ActionListener para ver se a mudar seu estado, mas eu estou querendo saber se há uma solução muito melhor ou mais limpa.
Solução
Olhe para JRadioButton. addItemListener ()
EDIT: É improvável que você quiser usar um ChangeListener como ele dispara várias vezes por clique. Um ItemListener dispara apenas uma vez por clique. Veja aqui
EDIT2: Só para expandir sobre isso, um actionListener em um JRadioButton dispara cada vez que um usuário clica nele, mesmo se ele já estiver selecionado. se é isso que você quer, tudo bem, mas acho que é irritante. Eu só quero ser notificado que está selecionada ou não.
A ChangeListener irá disparar para todos os tipos de coisas, o que significa que o ouvinte receberá 5 ou mais eventos por clique. Não é bom.
Um ItemListener dispara única se as mudanças de estado selecionadas ou desmarcadas. Isso significa que um usuário pode clicar sobre ela várias vezes e não vai disparar se ele não muda. No seu método de manipulador que você terá que ter um bloco if
verificação de SELECTED
ou DESELECTED
status e fazer tudo o que existe:
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
// Your selected code here.
}
else if (e.getStateChange() == ItemEvent.DESELECTED) {
// Your deselected code here.
}
}
Ele simplesmente funciona melhor, porque você sabe que se você está no método, em seguida, o botão de rádio, ou terá sido apenas selecionada ou não, não que o usuário está apenas batendo na interface por algum motivo desconhecido.
Outras dicas
Eu acredito que você deseja adicionar uma implementação ChangeListener
.