Така че аз получих своя код за обработка, който работи в Java. Но сега искам да го вградя в JavaFX за моя GUI. Как мога да го направя? Опитах да използвам следния код, но изглежда не работи.
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())
);
stage.setScene(
new Scene(
new Group(swingNode),
appletSize.getWidth(), appletSize.getHeight(),
Color.BLACK
)
);
stage.show();
}
@Override public void stop() {
applet.stop();
applet.destroy();
}
public static void main(String[] args) {
launch(args);
}
}
Получавам грешка при getRootPane (). Можете ли да предложите алтернатива за него?
Отговори:
0 за отговор № 1Защо се опитвате да получите кореновия панел на аплета? Просто добавете аплета към JPanel и след това добавете JPanel към вашия SwingNode:
JPanel panel = new JPanel();
panel.add(applet);
swingNode.setContent(panel)