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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top