Maven javafx-swing
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>19</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>19</version>
</dependency>
</dependencies>
JavaFX Swing DesktopPane
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* JavaFX App
*/
public class App extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage stage) {
// Le noeud pour afficher des contenus swing
var swingNode = new SwingNode();
// FIXME
// HACK : Le timer pour rafraichir le contenu Swing
new Timer().schedule(new TimerTask() {
public void run() {
SwingUtilities.invokeLater(() -> {
var content = swingNode.getContent();
if (content != null) {
content.repaint();
}
});
}
}, 500);
// Thread Swing
SwingUtilities.invokeLater(() -> {
// Le panneau pour afficher les fenêtres internes
var desktop = new JDesktopPane();
// La fenêtre interne
var internalFrame = new JInternalFrame();
internalFrame.setSize(400, 200);
internalFrame.setVisible(true);
// Ajoute la fenêtre
desktop.add(internalFrame);
// Le panneau JFX pour des contenus JavaFX dans Swing
var jfxPanel = new JFXPanel();
internalFrame.add(jfxPanel);
// Thread JavaFX
Platform.runLater(() -> {
var label = new Label("Label JavaFX");
var button = new Button("Test");
var scene = new Scene(new VBox(label, button), 400, 200);
jfxPanel.setScene(scene);
});
swingNode.setContent(desktop);
});
var scene = new Scene(new StackPane(swingNode), 640, 480);
stage.setScene(scene);
// Termine le programme quand la fenêtre est fermée
stage.setOnCloseRequest(event -> {
System.exit(0);
});
stage.show();
}
}
Commentaires
Enregistrer un commentaire