import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.ScrollPane; import javafx.scene.input.ScrollEvent; import javafx.scene.input.ZoomEvent; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.Text; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class JavaFXJFrame { static Text text = new Text("Hello World"); static ScrollPane scrollPane; private static void initAndShowGUI() { // Création de la JFrame JFrame frame = new JFrame("FX"); // Panel permettant d'inclure les composants JavaFX final JFXPanel fxPanel = new JFXPanel(); frame.add(fxPanel); frame.setVisible(true); frame.setSize(300, 300); frame.setLocationRelativeTo(null); Platform.runLater(new Runnable() { public void run() { initFX(fxPanel); } }); } private static void initFX(JFXPanel fxPanel) { Scene scene = createScene(); fxPanel.setScene(scene); } // Creation de la scène private static Scene createScene() { Group root = new Group(); final Text text = new Text(); text.setX(60); text.setY(150); text.setFont(new Font(25)); text.setText("Mon Composant"); root.getChildren().add(text); Scene scene = new Scene(root, Color.ALICEBLUE); // Ajout du listener Zoom. Problème de non détection de l'évenement scene.setOnZoom(new EventHandler(){ public void handle(ZoomEvent event) { text.setFont(new Font(text.getFont().getSize()*event.getZoomFactor())); } }); // Ajout du listener de défilement. Problème il faut effectuer le geste du zoom pour que l'évenement soit pris en compte text.addEventHandler(ScrollEvent.ANY, new EventHandler() { public void handle(ScrollEvent event) { text.setTranslateX(text.getTranslateX() + ((ScrollEvent) event).getDeltaX()); text.setTranslateY(text.getTranslateY() + ((ScrollEvent) event).getDeltaY()); } }); return scene; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { initAndShowGUI(); } }); } }