2017-01-27 3 views
0

Ich möchte, dass die Knöpfe B und D auf ihren Plätzen bleiben, wenn A und C verschwunden sind, aber stattdessen werden sie in die Mitte verschoben. Wie könnte ich sie zurück zu ihren Plätzen bringen?Wie man Tasten im GridPane verschiebt?

 fifty.setOnAction(e->{ 
      fifty.setDisable(false); 
      int counter = 2; 
      ArrayList<String> variants = new ArrayList<>(Arrays.asList("a","b","c","d")); 
      variants.remove(trueAnswerIndex); 
      String variant; 
      int n = 2; 

      while(counter>0){ 
       variant = variants.get(randInt(0,n)); 
       switch(variant){ 
        case "a": 
         gridButtons.getChildren().remove(a); 
         variants.remove("a"); 
         break; 
        case "b": 
         gridButtons.getChildren().remove(b); 
         variants.remove("b"); 
         break; 
        case "c": 
         gridButtons.getChildren().remove(c); 
         variants.remove("c"); 
         break; 
        case "d": 
         gridButtons.getChildren().remove(d); 
         variants.remove("d"); 
         break; 
       } 
       counter--; 
       n--; 
      } 
     }); 

https://i.stack.imgur.com/pPpC4.jpg

+0

Bitte geben Sie Ihren Code in Ihre Frage ein. – Nash

Antwort

1

Nur deaktivieren Sie die Sichtbarkeit der Tasten, anstatt die Tasten zu entfernen.

fifty.setOnAction(e->{ 
     fifty.setDisable(false); 
     int counter = 2; 
     ArrayList<String> variants = new ArrayList<>(Arrays.asList("a","b","c","d")); 
     variants.remove(trueAnswerIndex); 
     String variant; 
     int n = 2; 

     while(counter>0){ 
      variant = variants.get(randInt(0,n)); 
      switch(variant){ 
       case "a": 
        a.setVisible(false); 
        variants.remove("a"); 
        break; 
       case "b": 
        b.setVisible(false); 
        variants.remove("b"); 
        break; 
       case "c": 
        c.setVisible(false); 
        variants.remove("c"); 
        break; 
       case "d": 
        d.setVisible(false); 
        variants.remove("d"); 
        break; 
      } 
      counter--; 
      n--; 
     } 
    }); 
0

Sie entweder einige Dummy-Komponenten verwenden können, wie leere Text Knoten oder manuell eingestellt RowConstraints und ColumnConstraints für Ihre GridPane.

Letzteres ist mein bevorzugter Ansatz. Im folgenden Beispiel habe ich diese Einschränkungen für die ersten beiden Zeilen und Spalten festgelegt. Selbst wenn die Schaltfläche ausgeblendet oder entfernt wird, werden andere Spalten nicht automatisch skaliert.

Ich habe auch die GridPane innerhalb einer anderen Node, denn sonst würde es füllen die ganze Scene.

public class JavaFXTest extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Group root = new Group(); 
     GridPane pane = new GridPane(); 

     for (int i = 0; i < 2; i++) { 
      RowConstraints rc = new RowConstraints(); 
      rc.setPrefHeight(100); 

      ColumnConstraints cc = new ColumnConstraints(); 
      cc.setPercentWidth(100); 

      pane.getRowConstraints().add(rc); 
      pane.getColumnConstraints().add(cc); 
     } 

     Button b1 = new Button("1"); 
     b1.setPrefSize(100, 100); 

     Button b2 = new Button("2"); 
     b2.setPrefSize(100, 100); 

     Button b3 = new Button("3"); 
     b3.setPrefSize(100, 100); 

     Button b4 = new Button("4"); 
     b4.setPrefSize(100, 100); 

     b1.setOnAction(e -> { 
      b2.setVisible(false); 
     }); 

     b2.setOnAction(e -> { 
      b3.setVisible(false); 
     }); 

     b3.setOnAction(e -> { 
      b4.setVisible(false); 
     }); 

     b4.setOnAction(e -> { 
      b1.setVisible(false); 
     }); 

     pane.add(b1, 0, 0); 
     pane.add(b2, 1, 0); 
     pane.add(b3, 0, 1); 
     pane.add(b4, 1, 1); 

     root.getChildren().add(pane); 
     Scene scene = new Scene(root, 400, 400); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
Verwandte Themen