Come creare ButtonGroup di JToggleButton che consente di deselezionare l'opzione attuale?

StackOverflow https://stackoverflow.com/questions/4904086

  •  29-10-2019
  •  | 
  •  

Domanda

Questo è tutto.Devo creare un ButtonGroup che consenta di selezionare un'opzione o, se l'utente fa clic sull'opzione selezionata, deselezionare l'elemento (non verrà selezionato nulla) e, ovviamente, catturare l'evento per fare qualcosa.

È stato utile?

Soluzione

Nel caso in cui il collegamento di Jeff venga interrotto in futuro, ecco cosa viene descritto: è necessario creare una sottoclasse ButtonGroup per consentire una non selezione e aggiungere i pulsanti a questo buttongroup.

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else {
      clearSelection();
    }
  }
}

Altri suggerimenti

Ho notato un comportamento strano durante l'esecuzione di button.setSelected(false) su un pulsante / casella di controllo che non è selezionato.Ha deselezionato tutto come se avessi deselezionato qualcosa.

L'ho risolto in questo modo:

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else if (getSelection() != model) {
      clearSelection();
    }
  }
}

Cattura l'evento per fare qualcosa.Esegui anche le seguenti operazioni.

@Override
public void actionPerformed(ActionEvent e) {
    ((JToggleButton)e.getSource()).setSelected(false);
}

MODIFICA: Ma non è coinvolto alcun ButtonGroup.

Soluzione per pre 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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top