如何创建一个没有错误的新场景?

时间:2015-08-05 05:13:34

标签: java user-interface

我对Java比较新,我在运行程序时遇到了困难。现在,作为一个抬头,这是一个家庭作业。问题是在一个圆圈中创建一个输出为“欢迎使用Java”的程序。

到目前为止,这是我的代码:

import java.awt.Color;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.Parent;
import javafx.scene.layout.Pane;
import javafx.scene.text.*;
import javafx.stage.Stage;

public class Characters extends Application {
    public void start(Stage stage) {
        Pane canvas = new Pane(); 
        canvas.setStyle("-fx-background-color: black;"); 
        canvas.setPrefSize(200, 200); // set size of pane
        Font f = Font.font("Times New Roman", FontWeight.BOLD, 35);

    String s = "Welcome to Java"; 
    String c; 

    double d = 25.0, x = 10.0, y = 20.0; 
    for (int i = 0; i < s.length(); i++) {

        c = "" + s.charAt(i); 
        Text t = new Text(x, y, c); 

        t.setFont(f); 
        t.setRotate(d); 
        d++; 
        x++;
        y++;
        canvas.getChildren().add(t); 
    }

    Scene scene = new Scene(root,500, 500, Color.BLACK); 
    stage.setTitle("Characters around a circle");
    stage.setScene(scene);
    stage.show();
}

public static void main(String[] args) {
    launch(args);
}

} 

我一直在Scene scene = new Scene(root,500, 500, Color.BLACK);收到错误,但我找不到解决方法。任何帮助表示赞赏。感谢。

2 个答案:

答案 0 :(得分:0)

root未在您的程序中的任何位置声明。尝试将canvas添加到布局中,然后将布局添加到场景中。

BorderPane rootLayout = new BorderPane();
rootLayout.getChildren().add(canvas);
Scene scene = new Scene(rootLayout, 500,500);

答案 1 :(得分:0)

它看起来不像root(构造函数中的第一个参数)在作用域中的任何位置定义。

在文档中他们这样做:

Group root = new Group();
Scene s = new Scene(root, 300, 300, Color.BLACK);

但我不确定你是否想要放在canvas的某个地方。

需要注意的事项(从docs复制粘贴):

  

应用程序必须通过设置root属性为场景图指定根节点。如果使用组作为根,则场景图的内容将被场景的宽度和高度剪切,并且更改为场景的大小(如果用户调整舞台大小)将不会更改场景图的布局。如果可调整大小的节点(布局区域或控件设置为根,则根的大小将跟踪场景的大小,导致内容在必要时被中继。

基本上,如果您希望在Scene内强制使用组件,则看起来您需要Group。如果您希望组件更改Scene的大小,请使用可调整大小的节点(例如RegionControl)。