盘基地资源论坛

 找回密码
 立即注册
搜索
热搜: 书籍 电影 音乐
查看: 11|回复: 0

Java视频播放器代码

[复制链接]

965

主题

153

回帖

4320

积分

中级会员

Rank: 3Rank: 3

UID
32013
金钱
3187
钻石
7
积分
4320
注册时间
2023-7-27
发表于 前天 10:59 | 显示全部楼层 |阅读模式
  1. package com.example.window;

  2. import javafx.animation.FadeTransition;
  3. import javafx.application.Application;
  4. import javafx.application.Platform;
  5. import javafx.embed.swing.JFXPanel;
  6. import javafx.geometry.Pos;
  7. import javafx.scene.Scene;
  8. import javafx.scene.control.Button;
  9. import javafx.scene.layout.StackPane;
  10. import javafx.scene.media.Media;
  11. import javafx.scene.media.MediaPlayer;
  12. import javafx.scene.media.MediaView;
  13. import javafx.scene.paint.Color;
  14. import javafx.scene.shape.Polygon;
  15. import javafx.stage.FileChooser;
  16. import javafx.stage.Stage;
  17. import javafx.util.Duration;

  18. import javax.swing.*;
  19. import java.awt.*;
  20. import java.io.File;

  21. public class ManualWindowSwitching extends Application {
  22.     private JFrame frame;
  23.     private JFXPanel fxPanel;
  24.     private MediaPlayer mediaPlayer;
  25.     private Button playButton;

  26.     @Override
  27.     public void start(Stage primaryStage) {
  28.         frame = new JFrame("手动窗口切换");
  29.         frame.setSize(800, 600);
  30.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  31.         frame.setLocationRelativeTo(null);

  32.         // 设置内容面板背景为黑色
  33.         JPanel panel = new JPanel();
  34.         panel.setBackground(new java.awt.Color(0, 0, 0));
  35.         frame.getContentPane().add(panel, BorderLayout.CENTER);

  36.         // 添加 JavaFX 面板
  37.         fxPanel = new JFXPanel();
  38.         frame.getContentPane().add(fxPanel, BorderLayout.CENTER);

  39.         // 初始化 JavaFX 环境,加载媒体播放器
  40.         Platform.runLater(() -> initFX(primaryStage));
  41.     }

  42.     private void initFX(Stage primaryStage) {
  43.         // 创建 StackPane 作为场景的根节点
  44.         StackPane root = new StackPane();
  45.         root.setAlignment(Pos.CENTER);
  46.         Scene scene = new Scene(root, Color.BLACK);

  47.         fxPanel.setScene(scene);

  48.         // 创建圆形的播放按钮,去除字体
  49.         playButton = new Button();
  50.         playButton.setStyle("-fx-background-radius: 50%; -fx-background-color: #4CAF50;");
  51.         playButton.setPrefSize(50, 50);
  52.         playButton.setVisible(false);

  53.         // 添加文件选择按钮,并设置中文文本
  54.         JButton chooseFileButton = new JButton("选择文件");
  55.         chooseFileButton.addActionListener(e -> {
  56.             Platform.runLater(() -> {
  57.                 FileChooser fileChooser = new FileChooser();
  58.                 fileChooser.setTitle("选择媒体文件");
  59.                 File file = fileChooser.showOpenDialog(null);
  60.                 if (file != null) {
  61.                     playMedia(file, primaryStage);
  62.                 }
  63.             });
  64.         });

  65.         // 将按钮添加到窗口中间(居中位置)
  66.         JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
  67.         buttonPanel.add(chooseFileButton);
  68.         frame.getContentPane().add(buttonPanel, BorderLayout.SOUTH);

  69.         // 显示窗口
  70.         frame.setVisible(true);
  71.     }

  72.     private void playMedia(File file, Stage primaryStage) {
  73.         // 创建 Media 和 MediaPlayer
  74.         Media media = new Media(file.toURI().toString());
  75.         mediaPlayer = new MediaPlayer(media);

  76.         // 创建 MediaView 并添加到 StackPane 中
  77.         MediaView mediaView = new MediaView(mediaPlayer);
  78.         StackPane root = (StackPane) fxPanel.getScene().getRoot();
  79.         root.getChildren().clear();
  80.         root.getChildren().add(mediaView);

  81.         // 设置 MediaView 的适应和保持比例
  82.         mediaView.fitWidthProperty().bind(root.widthProperty());
  83.         mediaView.fitHeightProperty().bind(root.heightProperty());
  84.         mediaView.setPreserveRatio(false);

  85.         // 创建一个新的 StackPane 来放置播放按钮
  86.         StackPane buttonPane = new StackPane();
  87.         buttonPane.setAlignment(Pos.CENTER);
  88.         buttonPane.getChildren().add(playButton);
  89.         root.getChildren().add(buttonPane);

  90.         // 播放和暂停按钮
  91.         playButton.setOnAction(e -> {
  92.             if (mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING) {
  93.                 mediaPlayer.pause();
  94.                 updateButtonToPause();
  95.             } else {
  96.                 mediaPlayer.play();
  97.                 updateButtonToPlay();
  98.             }
  99.             playButton.setVisible(false); // 点击按钮后再次隐藏
  100.         });

  101.         // 添加屏幕点击事件
  102.         root.setOnMouseClicked(e -> {
  103.             if (e.getClickCount() == 2) {
  104.                 toggleFullScreen();
  105.             } else {
  106.                 if (playButton.isVisible()) {
  107.                     playButton.setVisible(false);
  108.                 } else {
  109.                     playButton.setVisible(true);
  110.                 }
  111.             }
  112.         });

  113.         // 添加按钮点击动画效果
  114.         playButton.setOnMouseEntered(e -> {
  115.             FadeTransition fadeTransition = new FadeTransition(Duration.millis(200), playButton);
  116.             fadeTransition.setFromValue(1.0);
  117.             fadeTransition.setToValue(0.7);
  118.             fadeTransition.play();
  119.         });

  120.         playButton.setOnMouseExited(e -> {
  121.             FadeTransition fadeTransition = new FadeTransition(Duration.millis(200), playButton);
  122.             fadeTransition.setFromValue(0.7);
  123.             fadeTransition.setToValue(1.0);
  124.             fadeTransition.play();
  125.         });

  126.         mediaPlayer.play();
  127.     }

  128.     private void updateButtonToPlay() {
  129.         Polygon triangle = new Polygon();
  130.         triangle.getPoints().addAll(
  131.                 40.0, 25.0,
  132.                 10.0, 25.0,
  133.                 25.0, 5.0
  134.         );
  135.         triangle.setFill(Color.WHITE);
  136.         playButton.setGraphic(triangle);
  137.     }

  138.     private void updateButtonToPause() {
  139.         Polygon equalSign = new Polygon();
  140.         equalSign.getPoints().addAll(
  141.                 10.0, 10.0,
  142.                 40.0, 10.0,
  143.                 40.0, 40.0,
  144.                 10.0, 40.0
  145.         );
  146.         equalSign.setFill(Color.WHITE);
  147.         playButton.setGraphic(equalSign);
  148.     }

  149.     private void toggleFullScreen() {
  150.         if (frame.getExtendedState() == JFrame.NORMAL) {
  151.             frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  152.         } else {
  153.             frame.setExtendedState(JFrame.NORMAL);
  154.         }
  155.     }

  156.     public static void main(String[] args) {
  157.         launch(args);
  158.     }
  159. }   
复制代码


盘基地论坛免责声明
1、本站资源来自互联网用户收集发布,仅供用于学习和交流。
2、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。
3、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决。
4、联系邮箱:admin@panjdzy.com
5、官方网址:www.panjdzy.com
6、备用网址:www.panjd.top




上一篇:Java网页m3u流媒体播放器代码
下一篇:英语练习题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛新闻X


  扫码关注左侧公号,每月定期发送扩容福利码。

...

查看详情

Archiver|手机版|小黑屋|盘基地资源论坛

GMT+8, 2024-6-30 22:17 , Processed in 0.073537 second(s), 23 queries .

Powered by Discuz!

本站资源来自互联网用户收集发布,仅供用于学习和交流。

如有侵权之处,请联系站长并出示版权证明以便删除,敬请谅解!

联系邮箱:admin@panjdzy.com

快速回复 返回顶部 返回列表