나는 "슬롯 머신 효과"를 만들어야한다 : 나는 그곳에 루트 레이어를 가지고있다. 나는 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);
}
}
내 직사각형을 클릭하면 높이와 너비가 바뀌지 만 컨테이너 외부로 이동한다는 것이 내 문제입니다. – bogALT
내가 좋아하지 않는 코드에는 2 가지가 있습니다. 1. 100x100x3을 요구하는 동안 전체 이미지가 500x450이므로 창은 fxml에 올바르게 배치됩니까? 2. 회전 방법 나는 당신이 그것을 사용하고 있는지 확실히 모르겠다. 피벗 포인트를 알아 차렸다. http://docs.oracle.com/javafx/2/transformations/rotation.htm – AntJavaDev
조언을 주셔서 감사합니다. 나는 그것을 잘 이해했다고 확신하지 못하는 경우에도 회전식 피벗을 사용하여 방금 해결했다고 생각합니다. 코드가 작동하면 게시 할 것입니다. – bogALT