MediaPlayer
미디어 플레이어는 플레이할 소스 즉 비디오 파일이 필요합니다.
소스파일은 source 라는 폴더에 담아 탐색기에서 이클립스로
드래그 복사를 할겁니다. 그래야 이클립스에서 링크를 잘 찾아갑니다.
아무 곳에나 source 폴더를 만들고 제가 올린 그림과 동영상을 담아서
참고 동영상을 보면서 잘 따라 하시기 바랍니다.
현재 메인 파일과 핸들러 파일이 있는 패키지로 복사하는 겁니다.
패키지를 설정하지 않고 (default package) 사용하시는 분은
여기 (default package)에 드래그 복사를 하시면 됩니다.
그러면 패키지 폴더 안에 들어가는 것이 아니고 패키지와 동일 한 선상의 폴더로
복사가 됩니다. 이점 잘 인지 하시기 바랍니다.
복사는 어려울 것이 없는데 헷갈리면 동영상을 찾지 못해서 에러가 납니다.
아래의 동영상을 참고하세요.
사용 예제 ) 코드를 복붙 하여 실행해 보시기 바랍니다.
설명은 주석과 코드 아랫부분에 있습니다.
1. 메인 파일 예제입니다.(title 만 다르고 내용이 거의 변하지 않습니다.)
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class AppMain extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = (Parent)FXMLLoader.load(getClass().getResource("main.fxml"));
Scene scene = new Scene(root);
primaryStage.setTitle("Mediaview 예제 입니다.");
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setAlwaysOnTop(true);
}
public static void main(String[] args) {
launch(args);
}
}
2. main.fxml 파일 예제입니다.
그대로 복붙 하여 테스트해보시면 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.media.MediaView?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="516.0" prefWidth="604.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171" fx:controller="MainHandler">
<children>
<StackPane layoutX="114.0" layoutY="115.0">
<children>
<ImageView fx:id="imageView" fitHeight="200.0" fitWidth="360.0" preserveRatio="false">
<image>
<Image url="@audio.png" />
</image>
</ImageView>
<MediaView fx:id="mediaView" fitHeight="200.0" fitWidth="360.0" preserveRatio="false" />
</children>
</StackPane>
<Button fx:id="buttonPlay" layoutX="25.0" layoutY="423.0" prefHeight="40.0" prefWidth="60.0" text="재생" />
<Button fx:id="buttonPause" layoutX="255.0" layoutY="423.0" prefHeight="40.0" prefWidth="60.0" text="멈춤" />
<Button fx:id="buttonStop" layoutX="474.0" layoutY="423.0" prefHeight="40.0" prefWidth="60.0" text="중지" />
<Label alignment="CENTER" layoutX="70.0" layoutY="36.0" prefHeight="47.0" prefWidth="414.0" style="-fx-border-color: gray;" text="동영상 출력 예제 입니다.">
<font>
<Font size="36.0" />
</font>
</Label>
</children>
</AnchorPane>
3. MainHandler.java 핸들러 파일입니다.
그대로 복붙 하여 테스트하시길 바랍니다.
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.image.ImageView;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
public class MainHandler implements Initializable {
@FXML
private MediaView mediaView;
@FXML
private ImageView imageView;
@FXML
private Button buttonPlay;
@FXML
private Button buttonPause;
@FXML
private Button buttonStop;
private boolean booEnd;
@Override
public void initialize(URL location, ResourceBundle resources) {
// 미디어 객체를 소스 폴더의 video.mp4를 이용해만들어 줍니다.
// 미디어 플레이어에 사용할 파일을 정해 줍니다.
Media media = new Media(getClass().getResource("source/video.mp4").toString());
// 미디어 플레이어 생성 및 미디어 뷰에 설정
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaView.setMediaPlayer(mediaPlayer);
// 해당 상태가 되면 실행할 Runnable 설정
mediaPlayer.setOnReady(new Runnable() {
// 화면이 동영상이 실행 되는 쓰레드 사용합니다.
@Override
public void run() {
// 시작시 플레이 버튼만 활성화 하고
// 나머지는 비활성화 함.
buttonPlay.setDisable(false);
buttonPause.setDisable(true);
buttonStop.setDisable(true);
}
});
// 플레이 뒤고 있을 경우의 버튼 활성 비활성의 상태
// 아래의 경우도 똑 같은 경우입니다.
mediaPlayer.setOnPlaying(() -> {
buttonPlay.setDisable(true);
buttonPause.setDisable(false);
buttonStop.setDisable(false);
});
mediaPlayer.setOnPaused(() -> {
buttonPlay.setDisable(false);
buttonPause.setDisable(true);
buttonStop.setDisable(false);
});
//비디오가 끝났을 경우의 처리
//booEnd 변수에 true 를 넣어 재생 버튼을 눌렀을 때
//처음 부터 실행 할것인지를 결정 하게 한다.
mediaPlayer.setOnEndOfMedia(() -> {
booEnd = true;
buttonPlay.setDisable(false);
buttonPause.setDisable(true);
buttonStop.setDisable(true);
});
mediaPlayer.setOnStopped(() -> {
mediaPlayer.seek(mediaPlayer.getStartTime());
buttonPlay.setDisable(false);
buttonPause.setDisable(true);
buttonStop.setDisable(true);
});
// 버튼 ActionEvent 처리
buttonPlay.setOnAction(event -> {
//플레이 버튼을 눌렀을때
//동영상이 끝날상태 즉 booEnd 에 true 가 들어 가있을 경우에는
//종료하고 처음으로 재생시점을 이동한다.
//그리고 다시booEnd에 false 를 대입해 지금 동영상이
//끝이 아니라는 것을 알려준다.
if (booEnd) {
mediaPlayer.stop();
mediaPlayer.seek(mediaPlayer.getStartTime());
}
mediaPlayer.play();
booEnd = false;
});
//각가의 버튼을 선택 했을 때의 기능을 설정 하는 부분
buttonPause.setOnAction(event -> mediaPlayer.pause());
buttonStop.setOnAction(event -> mediaPlayer.stop());
}
}
4. 소스파일입니다.
이 두 파일을 다운로드하시고 source 폴더를 만들고 그 폴더에 넣어서
이클립스의 현재 패키지로 드래그 복사하시면 됩니다.
아래는 옮기는 동영상입니다.
사무용 프로그램을 만들 때는 간단한 사용설명을 동영상으로 만들면
좋습니다.
위 예제를 참고하셔서 조금만 응용하면 됩니다.
좋은 결과가 있기를 바랍니다.
프로그램 실행 동영상 입니다.
세상 모든 것들은 그 자신을 위해 존재한다.
'자바' 카테고리의 다른 글
자바 자바fx 프로그레스인디게이터 progressIndicator [북붙따라하기] (0) | 2021.01.07 |
---|---|
자바 자바fx 프로그레스바 ProgressBar [북붙따라하기] (0) | 2021.01.06 |
자바 자바fx 테이블뷰 TableView [북붙따라하기] (0) | 2021.01.05 |
자바 자바fx 리스트뷰 ListView [북붙따라하기] (0) | 2021.01.04 |
자바 자바fx 날짜 색깔 DatePicker , ColorPicker [북붙따라하기] (0) | 2021.01.04 |
댓글