2017-01-27 1 views
0

A와 C가 사라질 때 버튼 B와 D가 자리에 남아 있기를 원하지만 그 대신에 센터로 이동했습니다. 어떻게 내가 그들을 다시 그들의 장소로 옮길 수 있을까?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 노드 같은 일부 더미 구성 요소를 사용하거나 수동으로 GridPane에 대한 RowConstraintsColumnConstraints을 설정할 수 있습니다.

후자가 내가 선호하는 방법입니다. 아래 예제에서 처음 두 행과 열에 대해 이러한 제약 조건을 설정하므로 버튼이 숨겨 지거나 제거되는 경우에도 다른 열은 자동으로 크기가 조정되지 않습니다.

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); 
    } 
} 
관련 문제