
使用javafx的Media,MediaPlayer,MediaView。代码如下:
import javaioFile;import javafxapplicationApplication;
import javafxbeansbindingBindings;
import javafxbeanspropertyReadOnlyProperty;
import javafxbeansvalueObservableValue;
import javafxeventActionEvent;
import javafxgeometryPos;
import javafxsceneScene;
import javafxscenecontrolButton;
import javafxscenecontrolMenu;
import javafxscenecontrolMenuBar;
import javafxscenecontrolMenuItem;
import javafxscenecontrolSlider;
import javafxsceneimageImage;
import javafxsceneimageImageView;
import javafxscenelayoutBorderPane;
import javafxscenelayoutHBox;
import javafxscenelayoutPane;
import javafxscenelayoutVBox;
import javafxscenemediaMedia;
import javafxscenemediaMediaPlayer;
import javafxscenemediaMediaPlayerStatus;
import javafxscenemediaMediaView;
import javafxstageFileChooser;
import javafxstageFileChooserExtensionFilter;
import javafxstageStage;
import javafxutilDuration;
public class App extends Application {
private MediaView mediaView;
private Slider processSlider;
private static final Object AUTO = new Object(), MANUAL = new Object();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStagesetTitle("javafx视频播放器");
BorderPane root = new BorderPane();
// 菜单栏
initMenu(root);
// 视频播放控件
mediaView = initMediaView(root);
// 视频功能控件
initMediaControllView(root);
primaryStagesetScene(new Scene(root, 600, 400));
primaryStagesetOnCloseRequest(event -> Systemexit(0));
primaryStageshow();
}
private MenuBar initMenu(final BorderPane parent) {
Menu menu = new Menu("菜单");
MenuItem item = new MenuItem("打开");
itemsetOnAction(event -> {
FileChooser chooser = new FileChooser();
choosersetTitle("选择视频文件");
choosergetExtensionFilters()add(new ExtensionFilter("视频文件", "mp4", "flv"));
File file = choosershowOpenDialog(parentgetScene()getWindow());
if (file != null) {
MediaPlayer player = mediaViewgetMediaPlayer();
// 关闭当前的player
if (player != null) {
playerstop();
playerdispose();
}
processSlidersetValue(0);
// 创建一个新的player并自动播放
player = new MediaPlayer(new Media(filetoURI()toString()));
playercurrentTimeProperty()addListener(this::mediaProcessChanged);
playersetAutoPlay(true);
mediaViewsetMediaPlayer(player);
}
});
menugetItems()add(item);
item = new MenuItem("退出");
itemsetOnAction(event -> parentgetScene()getWindow()hide());
menugetItems()add(item);
MenuBar menuBar = new MenuBar(menu);
parentsetTop(menuBar);
return menuBar;
}
private MediaView initMediaView(final BorderPane parent) {
MediaView view = new MediaView();
Pane pane = new Pane(view);
parentsetCenter(pane);
// 视频宽高可随着窗口变化而自动缩放
viewfitWidthProperty()bind(BindingsselectDouble(viewparentProperty(), "width"));
viewfitHeightProperty()bind(BindingsselectDouble(viewparentProperty(), "height"));
viewsetPreserveRatio(true);
return view;
}
private void initMediaControllView(final BorderPane parent) {
VBox bottom = new VBox(10);
bottomsetAlignment(PosCENTER);
parentsetBottom(bottom);
Slider slider = new Slider(0, 100, 0);
slidervalueProperty()addListener(this::processSliderChanged);
// slidersetOnMouseClicked(this::processSliderClicked);
bottomgetChildren()add(slider);
processSlider = slider;
HBox hbox = new HBox(10);
bottomgetChildren()add(hbox);
hboxsetAlignment(PosCENTER);
Button btn = new Button(null, new ImageView(loadImage("pausepng")));
btnsetOnAction(this::pauseOrPlay);
hboxgetChildren()add(btn);
btn = new Button(null, new ImageView(loadImage("stoppng")));
btnsetOnAction(this::stopPlay);
hboxgetChildren()add(btn);
}
private static Image loadImage(String resPath) {
return new Image(ThreadcurrentThread()getContextClassLoader()getResourceAsStream(resPath));
}
private void pauseOrPlay(ActionEvent event) {
MediaPlayer player = mediaViewgetMediaPlayer();
if (player == null) {
return;
}
Status status = playergetStatus();
if (status == StatusREADY || status == StatusPAUSED) {
playerplay();
((Button) eventgetTarget())setGraphic(new ImageView(loadImage("pausepng")));
} else if (status == StatusPLAYING) {
playerpause();
((Button) eventgetTarget())setGraphic(new ImageView(loadImage("playpng")));
}
}
private void stopPlay(ActionEvent event) {
MediaPlayer player = mediaViewgetMediaPlayer();
if (player == null) {
return;
}
playerstop();
}
// private void processSliderClicked(MouseEvent event) {
// Slider slider = (Slider) eventgetSource();
// if (mediaViewgetMediaPlayer() != null) {
// Duration d = mediaViewgetMediaPlayer()getTotalDuration()multiply(slidergetValue() / slidergetMax());
// mediaViewgetMediaPlayer()seek(d);
// }
// }
private void processSliderChanged(ObservableValue< extends Number> observable, Number oldValue, Number newValue) {
Slider slider = (Slider) ((ReadOnlyProperty< extends Number>) observable)getBean();
if (slidergetUserData() == AUTO) { // 进度条是自动改变的,因此不用设置播放器
slidersetUserData(null);
return;
}
if (mediaViewgetMediaPlayer() != null) {
slidersetUserData(MANUAL);
Duration d = mediaViewgetMediaPlayer()getTotalDuration()multiply(newValuedoubleValue() / slidergetMax());
mediaViewgetMediaPlayer()seek(d);
}
}
private void mediaProcessChanged(ObservableValue< extends Duration> observable, Duration oldValue, Duration newValue) {
if (processSlidergetUserData() == MANUAL) { // 手动点击进度条
processSlidersetUserData(null);
return;
}
MediaPlayer player = (MediaPlayer) ((ReadOnlyProperty< extends Duration>) observable)getBean();
processSlidersetUserData(AUTO);
processSlidersetValue(newValuetoMillis() / playergetTotalDuration()toMillis() 100);
}
}
你的import错了,没有javafxui这个包。
你看一下javafx的API:
>
ImageIcon img=new ImageIcon("images/1jpg");//其中images是项目下的文件夹,你注意存放的位置
别弄错了,错了就显示不出来了。
thissetIconImage(imggetImage());
一,瘦客户端,富客户端简介
富客户端RIA开发可以有多种,主要的有 MS C# Silverlight, Adobe Flash/Flex,Oracle Java JavaFX,有些运行在浏览器中,有些运行在浏览器外;
瘦客户端主要是指 HMTL+JS+CSS 在浏览器中运行的系统。
二,JavaFX 环境搭建
目前很多游戏或系统还很多使用富客户端开发,这里介绍Java 的 JavaFX ,使用JavaFX开发,首先就是开发环境的搭建,JavaFX的搭建环境需要如下:
1,java JDK ,是运行java必备的环境,安装后还设置系统环境变量等,使用 J2SE 7+版,
2,Eclipse ,优秀的 Java 的集成开发环境,使用 V372 版本,
3,javaFX 插件 JavaFX Scene Builder 10,用来开发界面UI,即 fxml 文件的生成,支持随见即所得的效果,
4,javaFX 插件下载后安装到Eclipse开发环境中,如何安装具体忘了,可以参考 JavaFX 工具安装和用法介绍 >
1javaFX也是像applet一样嵌入到页面中才能在web应用程序中运行,但是你需要先将自己的程序使用JavaFX脚本编译器将JavaFX脚本编译成Java Applet,然后发布到网页中
2用netbeans开发的话,就很方便了,在项目名上右键属性,选run,就可以看到浏览器、手机、web start等选项,你可以把你的程序任意发布了。
显示的错误
点击 Project->Properties
如图所示
选择API
把第二个选择项(Forbidden reference)改为Ignore
应用
好了
当我们完成了MyScene类后,可以开始写Java的主程序了,这是个标准的Swing程序中调用JavaFX代码如下:
package swingtest; / JavaFXToSwingTestjava >
以上就是关于初学了一段时间Java。想做一个应用程序,程序只需要播放一个本地视频,MP4格式,求教怎么做全部的内容,包括:初学了一段时间Java。想做一个应用程序,程序只需要播放一个本地视频,MP4格式,求教怎么做、javaFX helloword问:" 软件包 javafx.ui 不存在"、idea 开发 javaFX 修改编译后的文件图标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)