java - 如何在 JavaFX 中嵌入 Piccolo 2D Canvas ?

标签 java swing javafx javafx-8 piccolo

如何在 JavaFX 中嵌入 Piccolo2D Canvas ?

我认为它应该通过 SwingNode 工作, 因为 Piccolo 有一个名为 PCanvasSwing 控件.

这种方法适用于 Swing:

public static void main(String[] args) {

        PPath ellipse = PPath.createEllipse(100,100,400,200);

        PCanvas canvas = new PCanvas();
        canvas.getLayer().addChild(ellipse);


        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.add(canvas, BorderLayout.CENTER);


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setLocation(0, 0);
        frame.setTitle("PCanvas_Try01");
        frame.setVisible(true);
    }

但这不适用于 JavaFX:

@Override
    public void start(Stage stage) throws Exception {

        PPath ellipse = PPath.createEllipse(100, 100, 400, 200);

        PCanvas canvas = new PCanvas();
        canvas.getLayer().addChild(ellipse);

        SwingNode swingNode = new SwingNode();
        swingNode.setContent(canvas);

        Group group = new Group();
        group.getChildren().add(swingNode);

        Scene scene = new Scene(group);

        stage.setTitle("PCanvas_Try02");
        stage.setScene(scene);
        stage.show();

    }

最佳答案

Group 可能存在一些问题。以下似乎有效:

import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolo.PCanvas;
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class DemoPiccoloFx extends Application {

    @Override
    public void start(Stage stage) {
        PPath ellipse = PPath.createEllipse(100, 100, 400, 200);

        PCanvas canvas = new PCanvas();
        canvas.getLayer().addChild(ellipse);

        SwingNode swingNode = new SwingNode();
        swingNode.setContent(canvas);

        StackPane pane = new StackPane();
        pane.getChildren().add(swingNode);
        stage.setScene(new Scene(pane, 500, 300));
        stage.setTitle("PCanvas_Try02");
        stage.show();
    }

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

enter image description here

关于java - 如何在 JavaFX 中嵌入 Piccolo 2D Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141385/

相关文章:

Java 获取 JPanel 组件

Java/Swing : Trying to get BorderLayout to play nice with GridBagLayout

java - TreeUI 的自定义 ui 委托(delegate)

java - 场景生成器 : How to hide borders on panels, 等

java - 如何使 CSV 文件包含多个用户

java - Android Studio 上 Kotlin(非 Android)项目的 ClassNotFoundException 错误

java - 从 Android 应用程序向 Web 托管的 Java 应用程序发送和接收数据

JavaFX 预加载器从未从 main 调用

java - 非静态内部类名作为类型参数

java - 如何在 android jdk 中动态地使用 ImageView 填充 TableLayout?