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.

Foi útil?

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

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);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top