2017-01-27 18 views
0

Я хочу, чтобы кнопки B и D оставались на своих местах, когда A и C исчезли, но вместо этого они смещены в центр. Как я могу переместить их обратно на свои места?Как сменить кнопки в GridPane?

 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

Пожалуйста, включите ваш код в свой вопрос. – Nash

ответ

1

Просто отключить видимость кнопок вместо удаления кнопок.

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

Вы можете использовать некоторые фиктивные компоненты, как пустые Text узлов, или вручную установить RowConstraints и ColumnConstraints для GridPane.

Последний мой предпочтительный подход. В приведенном ниже примере я устанавливаю эти ограничения для первых двух строк и столбцов, поэтому даже если кнопка будет скрыта или удалена, другие столбцы не будут автоматически изменяться.

Я также поставил GridPane внутри другого Node, потому что в противном случае он заполнил бы весь 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); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^