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(){ } }
3 Réponses :
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.
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é.
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
.
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>
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.