我已经建模了魔方。经过系统输出测试,可以正常工作。处理诸如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;
}
}
是的,我知道这不是对多维数据集建模的最佳方法。 :)这是我在实际应用中的首次尝试。善良。