2017-12-27 79 views
0

JavaFX 용 NetBeans IDE 8.2를 사용하고 있습니다. 단추의 위치를 ​​변경하려면 setLayoutX/Y를 사용해야한다는 것을 이미 알고 있습니다. 나는 이것을 시도했지만 버튼에는 아무런 영향을 미치지 않는다.JavaFX에서 버튼을 배치하는 방법

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package javafxapplication2; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

/** 
* 
* @author coolDawg1234 
*/ 
public class JavaFXApplication2 extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     String x = "1"; 
     String y = "0"; 

     Button btn1 = new Button(x); 
     btn1.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       System.out.print(x); 
      } 
     }); 

     Button btn2 = new Button(y); 
     btn2.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       System.out.print(y); 
      } 
     }); 

     StackPane root = new StackPane(); 

     root.getChildren().add(btn1); 
     btn1.setLayoutX(250); 
     btn1.setLayoutY(220); 
     root.getChildren().add(btn2); 
     btn1.setLayoutX(200); 
     btn1.setLayoutY(200); 

     Scene scene = new Scene(root, 1000, 1000); 

     primaryStage.setTitle("WHAT\'s GOOD MY MANS"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

넷빈즈이 나에게 0 오류를 제공하고, 버튼의 위치가 나에게 잘 보이는 이외의 모든 : 여기 내 코드입니다.

제발 내 문제를 찾으십시오.

+0

도움을 주셔서 감사합니다. 'javafx.scene.layout.StackPane;'을 가져 오기를 'import javafx.scene.layout.StackPane;'으로 변경합니다. 'StackPane'의 다른 모든 인스턴스를'Pane'으로 전환했습니다. –

답변

4

버튼 컨테이너는 StackPane입니다. StackPane은 기본적으로 Pane의 구현으로, 기본적으로 레이아웃의 자식을 그 자체의 중심에 배치합니다. 따라서 장면을 레이아웃을 수행해야 할 때마다 자체 레이아웃 전략에 따라 layoutChildren() 방법으로 layoutXlayoutY 값을 설정합니다 (따라서 설정 한 값을 덮어 씁니다). 이 문제는 Pane의 대부분의 서브 클래스에서 발생합니다.

자식 노드를 수동으로 배치해야하는 경우 일반 Pane 컨테이너를 사용해야합니다. 하위 클래스를 선택하고 자신 만의 레이아웃 전략/논리를 제공하거나 자식 노드에 layoutXlayoutY 값을 직접 설정할 수 있습니다.

StackPane에서 제공하는 레이아웃 전략이 필요하지만 기본 위치와 약간 다른 위치에 배치하려는 경우 translateXProperty()translateYProperty()을 찾고있을 수 있습니다.