主要类有FXMLLoader
public void GeomStart() {
try {
FXMLLoader loader = new FXMLLoader (MYGUI.class.getResource (
"Geom.fxml"));
AnchorPane geomPage = (AnchorPane) loader.load ();
rootLayout.setCenter (geomPage);
primaryStage.setScene (rootScene);
GeomController controller = loader.getController ();
controller.setMainApp (this);
controller.setMyStage (primaryStage);
} catch (IOException ex) {
System.out.println (" Problem in loading geometry set");
Logger.getLogger (MYGUI.class.getName ()).log (Level.SEVERE, null,
ex);
}
}
在GeomController
我从主要类的继承Scene
继承Stage
到FXMLController
,其中包含:
public void setMainApp(MoncGUI badGUI) {
this.myGUI = myGUI;
}
public void setMyStage(Stage stage) {
this.geoStage = stage;
}
我在此控制器中声明了另一个函数
private void fixSetup() {
geoStage.setTitle("Testing");
System.out.println("fixSetup : Height = " + geoStage.getHeight()+" Width = "+geoStage.getWidth());
System.out.println("Scene Height " + geoStage.getScene().getHeight()+" Width "+geoStage.getScene().getWidth());
newScene = geoStage.getScene();
System.out.println("Scene Height " + geoScene.getHeight()+" Width "+geoScene.getWidth());
final Scene geoScene = new Scene(camV, drawWidth, drawHeight, true);
geoScene.setFill(new RadialGradient(225, 0.85, centerX, centerY,
drawWidth, false,
CycleMethod.NO_CYCLE, new Stop[]{new Stop(0f, Color.BLUE),
new Stop(1f, Color.LIGHTBLUE)}));
buildCamera(geoScene);
Context3D context = Context3D.getInstance(camV);
lightSetting(context);
axis = buildAxes();
camV.add(axis);
}
FXMLController
启动
@FXML
void doShapeCyl(ActionEvent event) {
if (initialized == 0) {
System.out.println("Processing initialized=0");
fixSetup();
initialized = 1;
}
drawCylSolid();
}
最后有一个函数
void complete() {
camV.frameCam(geoStage, geoScene);
MouseHandler mouseHandler = new MouseHandler(geoScene, camV);
KeyHandler keyHandler = new KeyHandler(geoStage, geoScene, camV);
geoStage.setScene(geoScene);
geoStage.show();
}
可能有许多函数,如drawCylSolid(),如drawSphSolid(),drawDiscSolid(),drawTube()等。我喜欢关联像
这样的组CameraViewer camV
到场景并定义宽度和高度,使作业等效于
final Scene geoScene = new Scene(camV, drawWidth, drawHeight, true);
虽然我希望避免使用“new Scene
”定义,因为它只是本函数的本地定义,并且最终无法用于FXML启动的函数或函数complete()
。