Discussions
Categories
- 196.9K All Categories
- 2.2K Data
- 239 Big Data Appliance
- 1.9K Data Science
- 450.4K Databases
- 221.7K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 550 MySQL Community Space
- 478 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 546 SQLcl
- 4K SQL Developer Data Modeler
- 187.1K SQL & PL/SQL
- 21.3K SQL Developer
- 295.9K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.6K Development Tools
- 107 DevOps
- 3.1K QA/Testing
- 646K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 155 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 18 Java Essentials
- 160 Java 8 Questions
- 86K Java Programming
- 80 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 204 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 442 LiveLabs
- 38 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 171 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 232 Portuguese
Play a video and display an image simultaneously

Hello everyone,
I am new to JavaFX and I would like to know if it is possible to simultaneously play a video and display an image above it in the same scene.
Particularly, I want the image to be displayed in a fixed position.
I have tried using a StackPane layout but I get an error in the following line:
sp.getChildren().add(mediaPlayer);
because the mediaPlayer object cannot be taken as a parameter and a Node object is needed
I have also tried adding both the video and the image in the same scene as seen below with no success (the video is being played but the image is not displayed)
root.getChildren().add(imageView);
Is what I'm trying to do feasible? And if yes, what methods should I use?
Thank you in advance for any answer!
Best Answer
-
I have tried using a StackPane layout but I get an error in the following line:
- sp.getChildren().add(mediaPlayer);
because the mediaPlayer object cannot be taken as a parameter and a Node object is needed
Wrap the mediaPlayer in a MediaView and add the media view to the container. Don't use a Group as the root pane as in the sample code in the example, though.
I have also tried adding both the video and the image in the same scene as seen below with no success (the video is being played but the image is not displayed)
I think this is because you are using a StackPane, which stacks nodes on top of each other (in Z-order); so if you add the video first it will be obscured by the image. Use a different layout pane: VBox is the simplest. The tutorial has a rundown of all the built-in layout panes.
So you'll do something like this:
public void start(Stage primaryStage) { Media media = new Media(...); MediaPlayer player = new MediaPlayer(media); MediaView mediaView = new MediaView(player); Image image = new Image(...); ImageView imageView = new ImageView(image); VBox root = new VBox(5); root.getChildren().add(mediaView); root.getChildren().add(imageView); Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.show(); }
Answers
-
I have tried using a StackPane layout but I get an error in the following line:
- sp.getChildren().add(mediaPlayer);
because the mediaPlayer object cannot be taken as a parameter and a Node object is needed
Wrap the mediaPlayer in a MediaView and add the media view to the container. Don't use a Group as the root pane as in the sample code in the example, though.
I have also tried adding both the video and the image in the same scene as seen below with no success (the video is being played but the image is not displayed)
I think this is because you are using a StackPane, which stacks nodes on top of each other (in Z-order); so if you add the video first it will be obscured by the image. Use a different layout pane: VBox is the simplest. The tutorial has a rundown of all the built-in layout panes.
So you'll do something like this:
public void start(Stage primaryStage) { Media media = new Media(...); MediaPlayer player = new MediaPlayer(media); MediaView mediaView = new MediaView(player); Image image = new Image(...); ImageView imageView = new ImageView(image); VBox root = new VBox(5); root.getChildren().add(mediaView); root.getChildren().add(imageView); Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.show(); }
-
Thank you for the quick reply James_D!
Following your instructions solved my problem!
Just for reference, I later found out that this could also be done by displaying two stages at the same time using the initOwner method but I don't know If it is a good practice.
Thanks again,
John