2
votes

Comment obtenir du texte à partir du bouton bascule dans javafx

Je suis nouveau sur JavaFX. Je travaille sur le projet de réservation de films. J'ai essayé de récupérer le texte du bouton bascule après l'avoir bouclé, mais je ne vois pas la méthode getText (). Existe-t-il un moyen d'obtenir le texte à partir du bouton bascule.

Voici mon code:

package theatre;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;

import java.net.URL;
import java.util.ResourceBundle;

public class TheatreController implements Initializable {

@FXML
private GridPane middleGridPane;

private final int MAX_ROW = 5;
private final int MAX_COL = 5;

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    int countRow = 1;
    ToggleButton[][] seats = new ToggleButton[MAX_ROW][MAX_COL];

    char lastRow = 'A' + (MAX_ROW - 1);

    for(char row = 'A'; row < lastRow; row++){
        for (int col = 1; col < MAX_COL; col++){
            seats[countRow][col] = new ToggleButton(String.format(row + "%02d", col));
            seats[countRow][col].setPrefWidth(50);
            middleGridPane.add(seats[countRow][col], countRow, col);
            seats[countRow][col].setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    // Can't get text from here
                    event.getEventType().getName();
                }
            });

        }
        countRow++;
    }
}

@FXML
public void bookSeat(){

}
}


0 commentaires

3 Réponses :


0
votes

Pourquoi obtiendriez-vous le texte de bascule? Quoi qu'il en soit, il n'a que deux états vrai ou faux. Nous pouvons utiliser les états pour déduire automatiquement. Les boutons à bascule ne vous donnent que l'état, mais ne peuvent pas donner de texte.

Si vous êtes spécifique pour tenir un texte, vous devriez probablement utiliser le menu déroulant.


1 commentaires

Bonjour, je souhaite récupérer le texte du bouton bascule afin de pouvoir l'ajouter à la liste afin de vérifier si les places sont déjà réservées ou non. si les places sont réservées, le bouton sera désactivé.



0
votes

Si vous voulez qu'une valeur soit associée à un ToggleButton , vous devez utiliser la méthode setUserData pour les boutons. Cela peut ensuite être récupéré en utilisant la méthode getUserData .


0 commentaires

1
votes

Toute variable que vous utilisez dans handle () de EventHandler doit être final ou effectivement finel .

Voici la solution à votre problème:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;
import java.net.URL;
import java.util.ResourceBundle;

public class TheatreController implements Initializable {

    @FXML
    private GridPane middleGridPane;

    private final int MAX_ROW = 5;
    private final int MAX_COL = 5;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        int countRow = 1;
        ToggleButton[][] seats = new ToggleButton[MAX_ROW][MAX_COL];

        char lastRow = 'A' + (MAX_ROW - 1);

        for(char row = 'A'; row < lastRow; row++){
            for (int col = 1; col < MAX_COL; col++){
                seats[countRow][col] = new ToggleButton(String.format(row + "%02d", col));
                seats[countRow][col].setPrefWidth(50);
                middleGridPane.add(seats[countRow][col], countRow, col);

                //effectively final variable to use in handle method of EventHandler
                int finalCountRow = countRow;
                int finalCol      = col;

                seats[countRow][col].setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {

                        //now you can get text from seats[finalCountRow][finalCol]
                        System.out.println(seats[finalCountRow][finalCol].getText());
                        event.getEventType().getName();
                    }
                });
            }
            countRow++;
        }
    }

    @FXML
    public void bookSeat(){

    }
}

p>


2 commentaires

C'est exactement ce que je veux. J'apprécie vraiment cela, mais pourquoi devons-nous initialiser une autre variable pour la sauvegarder?


@TriDo Parce que la valeur de la variable col et countRow change dans la boucle alors que la valeur de finalCol ou finalCountRow n'est attribué qu'une seule fois, ce qui les rend effectivement finel.