我一直在尝试将PApplet与GUI构建器(2.0)中设计的JavaFX GUI集成.创建SwingNode并向其添加草图实例后,在绘制一次后无法更新其框架.
我对JavaFX的经验很少,而且使用Swing,我不知道如何访问我在FXMLDocumentController类之外的GUI构建器中放置的组件.我假设草图需要从JFXP类初始化,但我不知道如何访问SwingNode的内容.理想情况下,我希望能够使用场景构建器[2.0]来创建GUI,而不是非视觉地创建组件.
任何帮助将不胜感激!
FXML控制器:
import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
import javafx.embed.swing.SwingNode;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javax.swing.JPanel;
import processing.core.*;
public class FXMLDocumentController implements Initializable {
mySketch p = new mySketch();
@FXML
public Label label;
public SwingNode sn;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
label.setText("Hello World!");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
JPanel panel = new JPanel();
panel.add(p);
p.init();
sn.setContent(panel);
}
static class mySketch extends …Run Code Online (Sandbox Code Playgroud) 所以我让我的处理代码在java中运行。但现在我想将它嵌入到我的 GUI 的 JavaFX 中。我怎样才能这样做呢?我尝试使用以下代码,但它似乎不起作用。
package testprocessing;
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javax.swing.JApplet;
import javax.swing.SwingUtilities;
import java.awt.Dimension;
import java.util.concurrent.*;
import processing.core.*;
public class JavaFxApplet extends Application {
private PApplet applet = new MyProcessingSketch();
private Dimension appletSize;
@Override public void init() throws ExecutionException, InterruptedException {
applet.init();
FutureTask<Dimension> sizingTask = new FutureTask<>(() ->
applet.getRootPane().getPreferredSize()
);
SwingUtilities.invokeLater(sizingTask);
appletSize = sizingTask.get();
}
@Override public void start(Stage stage) {
final SwingNode swingNode = new SwingNode();
SwingUtilities.invokeLater(() ->
swingNode.setContent(applet.getRootPane())
); …Run Code Online (Sandbox Code Playgroud)