Javafx:如何使用源文件的驱动程序文件来显示创建的形状

Javafx:如何使用源文件的驱动程序文件来显示创建的形状,java,javafx,shapes,scene,stage,Java,Javafx,Shapes,Scene,Stage,我正在努力理解为我正在处理的某个问题而提供的驱动程序文件。我刚开始学习javafx,我试图在驱动程序文件中创建一个形状,但是初始化、鼠标事件等的额外代码都在源文件中。我创建了一个函数,返回矩形的初始化X和驱动程序文件中的system.out.println,以便知道它们已连接。然而,每当我运行我的驱动程序文件时,我会得到一个没有形状的空白屏幕。有人能告诉我,我在现场/根/舞台表演方面有什么错吗 这是我的密码: Multishape.java: import javafx.application.

我正在努力理解为我正在处理的某个问题而提供的驱动程序文件。我刚开始学习javafx,我试图在驱动程序文件中创建一个形状,但是初始化、鼠标事件等的额外代码都在源文件中。我创建了一个函数,返回矩形的初始化X和驱动程序文件中的system.out.println,以便知道它们已连接。然而,每当我运行我的驱动程序文件时,我会得到一个没有形状的空白屏幕。有人能告诉我,我在现场/根/舞台表演方面有什么错吗

这是我的密码:

Multishape.java:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;


public class Multishape extends Group {
//Declaring variables here gives them greater scope

private Rectangle rectangle;
private Circle circle;
Group root = new Group();

public Multishape (double x, double y, double len){
  rectangle = new Rectangle(len, len, Color.BLUE);
  rectangle.setX(x);
  rectangle.setY(y);
  circle = new Circle(len, Color.RED);    

}

//@Override
public void start(Stage primaryStage) {
    //rectangle.setOnMouseClicked(handleMouseClick);//Set mouse click handler
    //circle.setOnMouseClicked(handleMouseClick);//Set mouse click handler

    root.getChildren().add(rectangle);//Set initial shape.

    Scene scene = new Scene(root, 500, 500);
    primaryStage.setScene(scene);
    primaryStage.show();
}


double getLen(){
  return (rectangle.getX());
}

}
MultishapeDriver.java:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.input.KeyEvent;
import javafx.event.EventHandler;

public class MultishapeDriver extends Application
{
  public static void main(String[] args)
  {
    launch(args);
  }

  public void start(Stage stage)
  {
    stage.setTitle("Multishape lab");
    Group root = new Group();
    Multishape shape = new Multishape(320, 240, 40);
    root.getChildren().add(shape);
//stage.addEventHandler(KeyEvent.KEY_TYPED, shape.getKeyHandler());

System.out.println(shape.getLen());
stage.setScene(new Scene(root, 640, 480));
stage.show();
  }
}

您的Multishape是Group类型的容器。 但是在它的构造器中,你只创建了2个对象,你从未将它们添加到你的多重图形中。 Sou您需要使用
getChildren().add(rectangele)
等将它们添加到您的多图形中

您的多形状构造函数将如下所示:

public Multishape (double x, double y, double len){
  rectangle = new Rectangle(len, len, Color.BLUE);
  rectangle.setX(x);
  rectangle.setY(y);
  circle = new Circle(len, Color.RED);    
  getChildren().add(rectangle);
  getChildren().add(circle);
}

您从未将任何子图形添加到
Multishape
。这样,对象对渲染结果没有影响。我希望
this.getChildren().add(矩形)位于构造函数的末尾。如果我正确理解该类背后的意图,则应将
字段和
开始
方法从
多图形
类中删除。顺便说一句:不知道你为什么在这里使用术语“驱动程序”。我希望司机是完全不同的。