2014-09-15 1 views
0

나는 "슬롯 머신 효과"를 만들어야한다 : 나는 그곳에 루트 레이어를 가지고있다. 나는 TilePane 셀에 각각 3 개, Rectangle 개를 가지고있다. 나는 그것을 표시하는 그림을 변경하기 위해 rect (크기 조정 및 회전)를 수정해야하는 이벤트 처리기를 추가하려고 시도했습니다. 불행히도, 내 인물은 결코 그 중심에 있지 않습니다. 어떻게 해결할 수 있습니까?Javafx : 사각형을 중앙에 유지하는 방법을 변환하는 방법은 무엇입니까?

package test; 

import java.util.Random; 
import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.geometry.Orientation; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.TilePane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.transform.Rotate; 
import javafx.stage.Stage; 

/** 
* 
* @author bog 
*/ 
public class Test extends Application { 
    StackPane root = new StackPane(); 
    TilePane tp = new TilePane(Orientation.HORIZONTAL); 
    @Override 
    public void start(Stage primaryStage) { 

     //root.getChildren().add(btn); 
     for(int i = 0; i < 3 ; i++){ 
      final Rectangle r = new Rectangle(100, 100, Color.GREY); 
      r.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 

       @Override 
       public void handle(MouseEvent t) { 
        Random rnd = new Random(); 
        int n = rnd.nextInt(5); 
        if(n == 0){  // horizontal line 
         r.setWidth(100); 
         r.setHeight(5); 
         System.out.println("Linea orizontale"); 
        } 
        if(n == 1){  // vertical line 
         r.setWidth(5); 
         r.setHeight(100); 
         System.out.println("Linea verticale"); 
        } 
        if(n == 2){  // rombo 
         r.getTransforms().add(new Rotate(45,50,50)); 
         System.out.println("rombo"); 
        } 
        if(n == 3){  // back-slash line 
         r.setWidth(5); 
         r.setHeight(100); 
         r.getTransforms().add(new Rotate(45,50,50)); 
         System.out.println("Linea /"); 
        } 
        if(n == 4){  // slash line 
         r.setWidth(100); 
         r.setHeight(5); 
         r.getTransforms().add(new Rotate(45,50,50)); 
         System.out.println("Linea \\"); 
        } 
       } 
      }); 
      final StackPane sp = new StackPane(); 
      sp.getChildren().add(r); 
      tp.getChildren().add(sp); 
     } 
     tp.setAlignment(Pos.CENTER); 
     root.getChildren().add(tp); 
     Scene scene = new Scene(root, 500, 450); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

답변

0

내가 당신의 문제가 무엇인지 확실히 모르겠습니다, 그리고 지금 내가 코드를 테스트하지 못할,하지만 난 손으로 정적 구성 요소를 만들 어디 정렬 문제를 가지고 거의 모든 시간이 나는 장면 빌더로 수정, 그것은 올바르게 렌더링 될 것이며, 그 안에 동적 구성 요소를 배치합니다. 따라서 창은 기본 앵커 창으로 시작하는 장면 작성기로 만들 수 있으며 내부에는 기본 너비로 3 개의 창을 배치하고 매번 원하는 이미지를 동적으로 추가합니다. 도움이 되길 바랍니다 ...

+0

내 직사각형을 클릭하면 높이와 너비가 바뀌지 만 컨테이너 외부로 이동한다는 것이 내 문제입니다. – bogALT

+1

내가 좋아하지 않는 코드에는 2 가지가 있습니다. 1. 100x100x3을 요구하는 동안 전체 이미지가 500x450이므로 창은 fxml에 올바르게 배치됩니까? 2. 회전 방법 나는 당신이 그것을 사용하고 있는지 확실히 모르겠다. 피벗 포인트를 알아 차렸다. http://docs.oracle.com/javafx/2/transformations/rotation.htm – AntJavaDev

+0

조언을 주셔서 감사합니다. 나는 그것을 잘 이해했다고 확신하지 못하는 경우에도 회전식 피벗을 사용하여 방금 해결했다고 생각합니다. 코드가 작동하면 게시 할 것입니다. – bogALT

관련 문제