如何在start方法之外使用舞台或舞台内的任何东西?

时间:2016-10-01 08:19:11

标签: java javafx syntax

我是javafx的新手 知道为什么下面的代码不起作用可能会有所帮助。 (第31行:pw无法解决)
但是,如果我知道我可能做错了什么或做得不够,那也很好 最终的目标是让它在屏幕上按像素绘制图片 然而,那张照片不太确定,我希望能够从多个不同的类别中为该图像添加像素。
也可以在顶部添加某种更传统的UI,但这不是优先考虑的事情。

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.image.PixelWriter;
import javafx.scene.canvas.*;

public class Render extends Application {

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

    @Override
    public void start(Stage stage) {
        stage.setTitle("Placeholder Title");
        Canvas canvas = new Canvas(1280, 720);
        Group root = new Group(canvas);
        Scene scene = new Scene(root, 1280, 720);
        stage.setScene(scene);
        PixelWriter pw = canvas.getGraphicsContext2D().getPixelWriter();
        stage.show();
    }

    private static void testRender() {
        int c = -1;
        for (int x = 0; x < 1280; x++) {
            for (int y = 0; y < 720; y++, c--) {
                pw.setArgb(x, y, c);
            }
        }
    }

}

2 个答案:

答案 0 :(得分:1)

您可以通过此链接开始使用JavaFX。

https://docs.oracle.com/javase/8/javafx/get-started-tutorial/

答案 1 :(得分:0)

由于我在评论中的解释似乎不清楚,我会尝试通过修改代码来解释(未经过测试,我会尝试帮助解决它可能包含的任何错误)。

选项1:将访问的变量存储为类成员:

c

选项2:将访问的实例作为参数传递:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.image.PixelWriter;
import javafx.scene.canvas.*;

public class Render extends Application {

    private PixelWriter pw;

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

    @Override
    public void start(Stage stage) {
        stage.setTitle("Placeholder Title");
        Canvas canvas = new Canvas(1280, 720);
        Group root = new Group(canvas);
        Scene scene = new Scene(root, 1280, 720);
        stage.setScene(scene);
        pw = canvas.getGraphicsContext2D().getPixelWriter();
        testRender(); // we can't call this before everything has been initialized anyway
        stage.show();
    }
    // this doesn't need to be static
    private void testRender() {
        int c = -1;
        for (int x = 0; x < 1280; x++) {
            for (int y = 0; y < 720; y++, c--) {
                pw.setArgb(x, y, c);
            }
        }
    }
}

我希望这有助于您了解可能的解决方案