Controlli UI ed Eventi con JavaFX: CheckBox

18 aprile 2017

Il controllo CheckBox di JavaFX consente la selezione multipla da un insieme di possibili scelte. Immaginiamo un form nel quale si chieda di selezionare i linguaggi di programmazione conosciuti tra un insieme di quelli indicati. Il primo passo è quello di definire un controllo CheckBox per ogni possibile scelta:

        CheckBox chkJava = new CheckBox("Java");
        CheckBox chkCplusPlus = new CheckBox("C++");
        CheckBox chkPhp = new CheckBox("Php");
        CheckBox chkCsharp = new CheckBox("C#");
        

Definiamo una label nella quale mostreremo la selezione delle scelte:

        Label lblChoice = new Label();
        lblChoice.setAlignment(Pos.TOP_LEFT);
        

Ed aggiungiamo i vari componenti ad un HBox come fatto nei precedenti capitoli:

        hBox.getChildren().addAll(chkJava, chkCplusPlus, chkPhp, chkCsharp, lblChoice);
        

Per poter utilizzare effettivamente una CheckBox, abbiamo bisogno di poter rispondere all’evento change corrispondente alla selezione o deselezione dell’oggetto. Implementiamo una classe CheckListener idonea a gestire questo evento, avendo cura di passare come come input al suo costruttore la label di visualizzazione, il controllo CheckBox e una lista di stringhe per la memorizzazione delle scelte effettuate:

        List<String> choiceList = new ArrayList<>();

        CheckListener checkListenerJava = new CheckListener(lblChoice, choiceList, chkJava);
        CheckListener checkListenerCPlusPlus = new CheckListener(lblChoice, choiceList, chkCplusPlus);
        CheckListener checkListenerPhp = new CheckListener(lblChoice, choiceList, chkPhp);
        CheckListener checkListenerCSharp = new CheckListener(lblChoice, choiceList, chkCsharp);

        chkJava.selectedProperty().addListener(checkListenerJava);
        chkCplusPlus.selectedProperty().addListener(checkListenerCPlusPlus);
        chkPhp.selectedProperty().addListener(checkListenerPhp);
        chkCsharp.selectedProperty().addListener(checkListenerCSharp);
        

La classe CheckListener implementa l’interfaccia ChangeListener<Boolean> fornendo quindi un’implementazione al metodo changed() che verrà invocato sulla selezione o deselezione di un CheckBox. Riportiamo la parte di codice fondamentale, l’esempio completo è presente in allegato al capitolo.

        class CheckListener implements ChangeListener<Boolean>{
            ...
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            String checkBoxTxt = checkBox.getText();
            if (newValue) {
                if (!choiceList.contains(checkBoxTxt)) {
                    choiceList.add(checkBoxTxt);
                }
            } else {
                choiceList.remove(checkBoxTxt);
            }

            lblChoice.setText("");
            StringBuilder newLblValue = new StringBuilder();
            choiceList.forEach((String choice) -> {
                newLblValue.append(choice).append(" ");
            });
            lblChoice.setText(newLblValue.toString());
        }
        ...
        }
        

All’interno del metodo changed() viene recuperato il valore testuale del CheckBox selezionato, se il valore corrente è cambiato (newValue=true), e se la lista non contiene la scelta selezionata, il valore viene aggiunto alla lista delle scelte effettuate. Con newValue=false, la scelta è stata deselezionata e viene quindi rimossa dalla lista.

Successivamente la label lblChoice viene pulita ed aggiornata con la nuova lista di selezioni. Se eseguiamo la demo avremo un’interfaccia simile alla seguente:

Figura 1. CheckBox.

CheckBox

Selezionando e deselezionando le varie opzioni vedremo la lista testuale aggiornarsi opportunamente.

Tutte le lezioni

1 ... 50 51 52 ... 127

Se vuoi aggiornamenti su Controlli UI ed Eventi con JavaFX: CheckBox inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Controlli UI ed Eventi con JavaFX: CheckBox

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy