2017-10-05 8 views
1

J'essaye d'implémenter un bouton à bascule Gluon Mobile pour une page de sondage, et quand je teste, le bouton saute un peu vers la gauche quand je clique dessus. Je ne veux pas que ça saute du tout. Vous pouvez voir ici:Gluon Mobile Toggle Button Saut

Toggle button jumping

Code pertinent est ici:

StackPane getToggler() { 

    ToggleButton toggleButton = new ToggleButton("Yes"); 
    ToggleButtonGroup toggleButtonGroup = new ToggleButtonGroup(); 
    toggleButtonGroup.setSelectionType(SelectionMode.SINGLE); 
    toggleButtonGroup.setPadding(new Insets(10)); 

    toggleButton = new ToggleButton("Yes"); 
    toggleButton.setStyle("-fx-text-fill:steelblue;"); 
    toggleButton.setUserData("1"); 
    toggleButton.setSelected(false); 
    toggleButton.selectedProperty().addListener((obv, ov, nv) -> { 
     if (nv.booleanValue()) { 
      toggleButtonGroup.setUserData("1"); 
     } 
    }); 

    toggleButtonGroup.getToggles().add(toggleButton); 

    toggleButton = new ToggleButton("No"); 
    toggleButton.setStyle("-fx-text-fill:steelblue;"); 
    toggleButton.setSelected(true); 
    toggleButton.setUserData("0"); 
    toggleButton.setSelected(false); 
    toggleButton.selectedProperty().addListener((obv, ov, nv) -> { 
     if (nv.booleanValue()) { 
      toggleButtonGroup.setUserData("0"); 
     } 
    }); 
    toggleButtonGroup.getToggles().add(toggleButton); 
    togglers.add(toggleButtonGroup); 

    StackPane wrapper = new StackPane(); 
    wrapper.setAlignment(Pos.CENTER); 
    wrapper.getChildren().add(toggleButtonGroup); 

    return wrapper; 
} 

est ici où je reçois les togglers et leur relation avec l'étiquette vers la gauche:

for (int i = 0; i < this.questions.length; i++) { 

     HBox row = new HBox(); 
     row.setSpacing(5); 
     row.setAlignment(Pos.CENTER_LEFT); 

     Label label = new Label(this.questions[i]); 
     label.setWrapText(true); 
     label.setPrefWidth(200); 
     label.setTextAlignment(TextAlignment.LEFT); 
     label.setFont(new Font("System", 14)); 

     StackPane wrapper = this.getToggler(); 

     Region region = new Region(); 
     HBox.setHgrow(region, Priority.ALWAYS); 
     HBox.setHgrow(label, Priority.NEVER); 

     row.getChildren().addAll(label,region,wrapper); 
     box.getChildren().add(row); 
     box.getChildren().add(new Separator()); 

    } 

Répondre

2

Après un peu de débogage, j'ai réalisé que la valeur de largeur minimale des boutons bascule est plus large que leur largeur de préfixe. Cela signifie que lorsque l'utilisateur sélectionne une bascule, la largeur minimale est appliquée et le contrôle est redimensionné avec la largeur minimale requise, ce qui réduit la région.

Une solution rapide (jusqu'à ce se fixe dans le contrôle) peut être le réglage de la largeur min de vos boutons à bascule:

private StackPane getToggler() { 

    ToggleButtonGroup toggleButtonGroup = new ToggleButtonGroup(); 

    ToggleButton toggleButtonYes = new ToggleButton("Yes"); 
    toggleButtonYes.minWidthProperty().bind(toggleButtonYes.prefWidthProperty()); 
    toggleButtonGroup.getToggles().add(toggleButtonYes); 

    ToggleButton toggleButtonNo = new ToggleButton("No"); 
    toggleButtonNo.minWidthProperty().bind(toggleButtonNo.prefWidthProperty()); 
    toggleButtonGroup.getToggles().add(toggleButtonNo); 

    ...; 
} 

+0

ont parfaitement fonctionné. Merci. –