Como criar ButtonGroup de JToggleButton's que permite desmarcar a opção atual?
-
29-10-2019 - |
Pergunta
É isso.Preciso criar um ButtonGroup que permita selecionar uma opção ou, se o usuário clicar na opção selecionada, desmarcar o item (nada será selecionado) e, claro, capturar o evento para fazer algo.
Solução
Apenas no caso de o link de Jeff ser quebrado no futuro, aqui está o que está descrito: você precisa criar uma subclasse de ButtonGroup para permitir uma não seleção e adicionar seus botões a este grupo de botões.
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else {
clearSelection();
}
}
}
Outras dicas
Isso mostra exatamente como fazer isso http://java.dzone.com/ articles / unselect-all-toggle-buttons
Notei um comportamento estranho ao fazer button.setSelected(false)
em um botão / caixa de seleção que não está selecionado.Ele desmarcou tudo como se eu tivesse desmarcado algo.
Eu consertei assim:
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else if (getSelection() != model) {
clearSelection();
}
}
}
Capture o evento para fazer algo.Faça também o seguinte.
@Override
public void actionPerformed(ActionEvent e) {
((JToggleButton)e.getSource()).setSelected(false);
}
EDITAR: Mas não há ButtonGroup envolvido.
Solução para pré java 1.6
public class NoneSelectedButtonGroup extends ButtonGroup {
private AbstractButton hack;
public NoneSelectedButtonGroup() {
super();
hack = new JButton();
add(hack);
}
@Override
public void setSelected(ButtonModel model, boolean selected) {
super.setSelected(selected ? model : hack.getModel(), true);
}
}