使用JavaFX更新场景

时间:2018-11-07 00:39:33

标签: java javafx scene

我已经建模了魔方。经过系统输出测试,可以正常工作。处理诸如rotateClockwise("frontface");之类的命令。现在,我试图以可视方式表示发生的情况。因此,我定义了方法drawCube(),该方法以2D方式绘制打开的立方体。还添加了一个按钮,onAction应该可以旋转多维数据集的正面。问题是当我单击它时什么也没有发生,并且我不知道如何使其工作。请帮忙。这是主要的课程。

package ro.adrianpush;


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


public class Main extends Application {

Cube rubiks = new Cube();
Button rotateFront = new Button("Rotate front clockwise");

@Override
public void start(Stage stage) {

    rotateFront.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
            rubiks.rotateClockwise("front");
            System.out.println("Button clicked");

        }
    });


    BorderPane borderPane = new BorderPane();

    Group root = new Group(rubiks.drawCube());
    root.getChildren().add(borderPane);

    //adding the button to the borderpane
    borderPane.setBottom(rotateFront);

    //Creating a scene object
    Scene scene = new Scene(root, 800, 600);

    //Setting title to the Stage
    stage.setTitle("Rubiks");

    //Adding scene to the stage
    stage.setScene(scene);

    //Displaying the contents of the stage
    stage.show();
}
public static void main(String args[]){
    launch(args);
}

}

谢谢您的帮助。

稍后编辑*根据要求,发布Cube和Cubeface类。

package ro.adrianpush;

import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

import java.util.ArrayList;
import java.util.HashMap;

public class Cube {

private HashMap<String, CubeFace> cubeMap;

public Cube() {
    cubeMap = new HashMap<>();

    cubeMap.put("top", new CubeFace("top","red"));
    cubeMap.put("bottom", new CubeFace("bottom","blue"));
    cubeMap.put("left", new CubeFace("left","yellow"));
    cubeMap.put("right", new CubeFace("right","green"));
    cubeMap.put("front", new CubeFace("front","purple"));
    cubeMap.put("back", new CubeFace("back","orange"));
}


public void rotateClockwise(String face){
    String tempColor;
    tempColor = cubeMap.get(face).getFaceMap().get(1);
    cubeMap.get(face).getFaceMap().put(1, cubeMap.get(face).getFaceMap().get(7));
    cubeMap.get(face).getFaceMap().put(7, cubeMap.get(face).getFaceMap().get(9));
    cubeMap.get(face).getFaceMap().put(9, cubeMap.get(face).getFaceMap().get(3));
    cubeMap.get(face).getFaceMap().put(3, tempColor);

    tempColor = cubeMap.get(face).getFaceMap().get(2);
    cubeMap.get(face).getFaceMap().put(2, cubeMap.get(face).getFaceMap().get(4));
    cubeMap.get(face).getFaceMap().put(4, cubeMap.get(face).getFaceMap().get(8));
    cubeMap.get(face).getFaceMap().put(8, cubeMap.get(face).getFaceMap().get(6));
    cubeMap.get(face).getFaceMap().put(6, tempColor);


    switch (face){
        case "top":

            for(int i = 0; i < 3; i++){
                tempColor = cubeMap.get("front").getFaceMap().get(1+i);
                cubeMap.get("front").getFaceMap().put(1 + i, cubeMap.get("right").getFaceMap().get(1 + i));
                cubeMap.get("right").getFaceMap().put(1 + i, cubeMap.get("back").getFaceMap().get(1 + i));
                cubeMap.get("back").getFaceMap().put(1 + i, cubeMap.get("left").getFaceMap().get(1 + i));
                cubeMap.get("left").getFaceMap().put(1 + i, tempColor);
            }
            break;

        case "front":

            tempColor = cubeMap.get("top").getFaceMap().get(7);
            cubeMap.get("top").getFaceMap().put(7, cubeMap.get("left").getFaceMap().get(9));
            cubeMap.get("left").getFaceMap().put(9, cubeMap.get("bottom").getFaceMap().get(3));
            cubeMap.get("bottom").getFaceMap().put(3, cubeMap.get("right").getFaceMap().get(1));
            cubeMap.get("right").getFaceMap().put(1, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(8);
            cubeMap.get("top").getFaceMap().put(8, cubeMap.get("left").getFaceMap().get(6));
            cubeMap.get("left").getFaceMap().put(6, cubeMap.get("bottom").getFaceMap().get(2));
            cubeMap.get("bottom").getFaceMap().put(2, cubeMap.get("right").getFaceMap().get(4));
            cubeMap.get("right").getFaceMap().put(4, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(9);
            cubeMap.get("top").getFaceMap().put(9, cubeMap.get("left").getFaceMap().get(3));
            cubeMap.get("left").getFaceMap().put(3, cubeMap.get("bottom").getFaceMap().get(1));
            cubeMap.get("bottom").getFaceMap().put(1, cubeMap.get("right").getFaceMap().get(7));
            cubeMap.get("right").getFaceMap().put(7, tempColor);
            break;

        case "right":

            tempColor = cubeMap.get("top").getFaceMap().get(9);
            cubeMap.get("top").getFaceMap().put(9, cubeMap.get("front").getFaceMap().get(9));
            cubeMap.get("front").getFaceMap().put(9, cubeMap.get("bottom").getFaceMap().get(9));
            cubeMap.get("bottom").getFaceMap().put(9, cubeMap.get("back").getFaceMap().get(1));
            cubeMap.get("back").getFaceMap().put(1, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(6);
            cubeMap.get("top").getFaceMap().put(6, cubeMap.get("front").getFaceMap().get(6));
            cubeMap.get("front").getFaceMap().put(6, cubeMap.get("bottom").getFaceMap().get(6));
            cubeMap.get("bottom").getFaceMap().put(6, cubeMap.get("back").getFaceMap().get(4));
            cubeMap.get("back").getFaceMap().put(4, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(3);
            cubeMap.get("top").getFaceMap().put(3, cubeMap.get("front").getFaceMap().get(3));
            cubeMap.get("front").getFaceMap().put(3, cubeMap.get("bottom").getFaceMap().get(3));
            cubeMap.get("bottom").getFaceMap().put(3, cubeMap.get("back").getFaceMap().get(7));
            cubeMap.get("back").getFaceMap().put(7, tempColor);
            break;

        case "left":

            tempColor = cubeMap.get("top").getFaceMap().get(7);
            cubeMap.get("top").getFaceMap().put(7, cubeMap.get("back").getFaceMap().get(3));
            cubeMap.get("back").getFaceMap().put(3, cubeMap.get("bottom").getFaceMap().get(7));
            cubeMap.get("bottom").getFaceMap().put(7, cubeMap.get("front").getFaceMap().get(7));
            cubeMap.get("front").getFaceMap().put(7, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(4);
            cubeMap.get("top").getFaceMap().put(4, cubeMap.get("back").getFaceMap().get(6));
            cubeMap.get("back").getFaceMap().put(6, cubeMap.get("bottom").getFaceMap().get(4));
            cubeMap.get("bottom").getFaceMap().put(4, cubeMap.get("front").getFaceMap().get(4));
            cubeMap.get("front").getFaceMap().put(4, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(1);
            cubeMap.get("top").getFaceMap().put(1, cubeMap.get("back").getFaceMap().get(9));
            cubeMap.get("back").getFaceMap().put(9, cubeMap.get("bottom").getFaceMap().get(1));
            cubeMap.get("bottom").getFaceMap().put(1, cubeMap.get("front").getFaceMap().get(1));
            cubeMap.get("front").getFaceMap().put(1, tempColor);
            break;

        case "bottom":
            tempColor = cubeMap.get("front").getFaceMap().get(7);
            cubeMap.get("front").getFaceMap().put(7, cubeMap.get("left").getFaceMap().get(7));
            cubeMap.get("left").getFaceMap().put(7, cubeMap.get("back").getFaceMap().get(7));
            cubeMap.get("back").getFaceMap().put(7, cubeMap.get("right").getFaceMap().get(7));
            cubeMap.get("right").getFaceMap().put(7, tempColor);

            tempColor = cubeMap.get("front").getFaceMap().get(8);
            cubeMap.get("front").getFaceMap().put(8, cubeMap.get("left").getFaceMap().get(8));
            cubeMap.get("left").getFaceMap().put(8, cubeMap.get("back").getFaceMap().get(8));
            cubeMap.get("back").getFaceMap().put(8, cubeMap.get("right").getFaceMap().get(8));
            cubeMap.get("right").getFaceMap().put(8, tempColor);

            tempColor = cubeMap.get("front").getFaceMap().get(9);
            cubeMap.get("front").getFaceMap().put(9, cubeMap.get("left").getFaceMap().get(9));
            cubeMap.get("left").getFaceMap().put(9, cubeMap.get("back").getFaceMap().get(9));
            cubeMap.get("back").getFaceMap().put(9, cubeMap.get("right").getFaceMap().get(9));
            cubeMap.get("right").getFaceMap().put(9, tempColor);
            break;
        case "back":
            tempColor = cubeMap.get("top").getFaceMap().get(3);
            cubeMap.get("top").getFaceMap().put(3, cubeMap.get("right").getFaceMap().get(9));
            cubeMap.get("right").getFaceMap().put(9, cubeMap.get("bottom").getFaceMap().get(7));
            cubeMap.get("bottom").getFaceMap().put(7, cubeMap.get("left").getFaceMap().get(1));
            cubeMap.get("left").getFaceMap().put(1, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(2);
            cubeMap.get("top").getFaceMap().put(2, cubeMap.get("right").getFaceMap().get(6));
            cubeMap.get("right").getFaceMap().put(6, cubeMap.get("bottom").getFaceMap().get(8));
            cubeMap.get("bottom").getFaceMap().put(8, cubeMap.get("left").getFaceMap().get(4));
            cubeMap.get("left").getFaceMap().put(4, tempColor);

            tempColor = cubeMap.get("top").getFaceMap().get(1);
            cubeMap.get("top").getFaceMap().put(1, cubeMap.get("right").getFaceMap().get(3));
            cubeMap.get("right").getFaceMap().put(3, cubeMap.get("bottom").getFaceMap().get(9));
            cubeMap.get("bottom").getFaceMap().put(9, cubeMap.get("left").getFaceMap().get(7));
            cubeMap.get("left").getFaceMap().put(7, tempColor);
            break;
    }


}

public void rotateCounterClockwise(String face){
    rotateClockwise(face);
    rotateClockwise(face);
    rotateClockwise(face);
}

//used for testing
public String getColor(String face, int tile){
    return cubeMap.get(face).getFaceMap().get(tile);
}


public HashMap<String, CubeFace> getCubeMap() {
    return cubeMap;
}

public ArrayList drawCube(){

    ArrayList tileList = new ArrayList();

    ArrayList frontFace = new ArrayList();

    for(int i = 1; i <= cubeMap.get("front").getFaceMap().size(); i++){

        int j = ((i-1)/3) * 50;
        int k = i*50 - j*3;

        Rectangle rectangle = new Rectangle(250+k, 250+j, 50,50);
        rectangle.setFill(Color.valueOf(cubeMap.get("front").getFaceMap().get(i)));
        tileList.add(rectangle);
    }

    for(int i = 1; i <= cubeMap.get("bottom").getFaceMap().size(); i++){

        int j = ((i-1)/3) * 50;
        int k = i*50 - j*3;

        Rectangle rectangle = new Rectangle(250+k, 400+j, 50,50);
        rectangle.setFill(Color.valueOf(cubeMap.get("bottom").getFaceMap().get(i)));
        tileList.add(rectangle);
    }

    for(int i = 1; i <= cubeMap.get("left").getFaceMap().size(); i++){

        int j = ((i-1)/3) * 50;
        int k = i*50 - j*3;

        Rectangle rectangle = new Rectangle(100+k, 250+j, 50,50);
        rectangle.setFill(Color.valueOf(cubeMap.get("left").getFaceMap().get(i)));
        tileList.add(rectangle);
    }

    for(int i = 1; i <= cubeMap.get("right").getFaceMap().size(); i++){

        int j = ((i-1)/3) * 50;
        int k = i*50 - j*3;

        Rectangle rectangle = new Rectangle(400+k, 250+j, 50,50);
        rectangle.setFill(Color.valueOf(cubeMap.get("right").getFaceMap().get(i)));
        tileList.add(rectangle);
    }

    for(int i = 1; i <= cubeMap.get("back").getFaceMap().size(); i++){

        int j = ((i-1)/3) * 50;
        int k = i*50 - j*3;

        Rectangle rectangle = new Rectangle(550+k, 250+j, 50,50);
        rectangle.setFill(Color.valueOf(cubeMap.get("back").getFaceMap().get(i)));
        tileList.add(rectangle);
    }

    for(int i = 1; i <= cubeMap.get("top").getFaceMap().size(); i++){

        int j = ((i-1)/3) * 50;
        int k = i*50 - j*3;

        Rectangle rectangle = new Rectangle(250+k, 100+j, 50,50);
        rectangle.setFill(Color.valueOf(cubeMap.get("top").getFaceMap().get(i)));
        tileList.add(rectangle);
    }
    return tileList;
}

}

package ro.adrianpush;

import java.util.HashMap;

public class CubeFace {

private String faceTitle;
private String color;
private int numTiles = 9;
private HashMap<Integer,String> faceMap = new HashMap<Integer, String>();

public CubeFace(String faceTitle, String color) {
    this.faceTitle = faceTitle;
    this.color = color;
    for(int i = 1; i <= numTiles; i++){
        faceMap.put(i, color);
    }
}

public String getFaceTitle() {
    return faceTitle;
}

public String getColor() {
    return color;
}

public int getNumTiles() {
    return numTiles;
}

public HashMap<Integer, String> getFaceMap() {
    return faceMap;
}
}

是的,我知道这不是对多维数据集建模的最佳方法。 :)这是我在实际应用中的首次尝试。善良。

0 个答案:

没有答案