JavaFX学习之Preloader
程序员文章站
2022-06-08 10:49:22
...
JavaFX在Application加载的时候提供了Proloader应用,可以展现loading process bar或者others notification。
Main Application
Preloader
若使用NetBeans,在构建Main Application时,便可以选着Preloader程序,运行时则只要运行Main程序即可。
若使用eclipse则需要使用Ant
主要是fx:application,它会帮你把main和preloader联系起来,然后生成jar包。然后执行这个jar包就可以了(最后变成执行jar,这是自己想的,但总感觉和netBeans里有点不同).
Preloader有3个方法可以重载
public void handleStateChangeNotification(StateChangeNotification scn) 总共调用三次,在main启动load,init,start之前。
public void handleProgressNotification(ProgressNotification pn) 二次0和1,全在main load 之前。
public void handleApplicationNotification(PreloaderNotification info) 当main函数里面调用notifyPreloader时才调用。
有了2个stage,则之间通信,可以有2种情况:
一:通过handleStateChangeNotification(StateChangeNotification evt) evt.getApplication获取main Application。一般都是preloader提供一个接口,main实现该接口,从而preloader通过接口可以获取main里面的内容。
二:PreloaderHandoverEvent实现preloaderNotification,然后main把node保存到PreloaderHandoverEvent类中,然后调用notifyPreloader方法,而preloader通过handleApplicationNotification(PreloaderNotification info)获取 final PreloaderHandoverEvent event = (PreloaderHandoverEvent)info;该实现类,然后获取node。
这里有很多javafx的小游戏,一个高手写的
[url]http://lustrezhang.gotoip4.com/fxgame/[/url]
这里有个javafx学习的中文网站,我把内容都丢那上面去了。
http://www.jfxee.com/
Main Application
package main;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import preloader.TestPreloader;
/**
*
* @author lq
*/
public class MainApplication extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Preloader
package preloader;
import javafx.application.Preloader;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
/**
* Simple Preloader Using the ProgressBar Control
*
* @author lq
*/
public class TestPreloader extends Preloader {
ProgressBar bar;
Stage stage;
private Scene createPreloaderScene() {
bar = new ProgressBar();
BorderPane p = new BorderPane();
p.setCenter(bar);
return new Scene(p, 300, 150);
}
@Override
public void init(){
System.out.println("preloader init");
}
@Override
public void start(Stage stage) throws Exception {
System.out.println("preloader start");
this.stage = stage;
stage.setScene(createPreloaderScene());
stage.show();
}
@Override
public void handleStateChangeNotification(StateChangeNotification scn) {
if (scn.getType() == StateChangeNotification.Type.BEFORE_START) {
stage.hide();
}
}
@Override
public void handleProgressNotification(ProgressNotification pn) {
bar.setProgress(pn.getProgress());
}
public static void main(String args[]){
launch();
}
}
若使用NetBeans,在构建Main Application时,便可以选着Preloader程序,运行时则只要运行Main程序即可。
若使用eclipse则需要使用Ant
<project name="TestPreloader" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<target name="default">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml" uri="javafx:com.sun.javafx.tools.ant" classpath=".:C:/Program Files/Java/jdk1.7.0_07/lib/ant-javafx.jar" />
<fx:application id="app-desc" mainClass="main.MainApplication" preloaderClass="preloader.TestPreloader">
</fx:application>
<fx:jar destfile="dist/application.jar">
<fx:application refid="app-desc"/>
<fileset dir="bin"/>
</fx:jar>
<java jar="dist/application.jar" fork='true'/>
</target>
</project>
主要是fx:application,它会帮你把main和preloader联系起来,然后生成jar包。然后执行这个jar包就可以了(最后变成执行jar,这是自己想的,但总感觉和netBeans里有点不同).
Preloader有3个方法可以重载
public void handleStateChangeNotification(StateChangeNotification scn) 总共调用三次,在main启动load,init,start之前。
public void handleProgressNotification(ProgressNotification pn) 二次0和1,全在main load 之前。
public void handleApplicationNotification(PreloaderNotification info) 当main函数里面调用notifyPreloader时才调用。
有了2个stage,则之间通信,可以有2种情况:
一:通过handleStateChangeNotification(StateChangeNotification evt) evt.getApplication获取main Application。一般都是preloader提供一个接口,main实现该接口,从而preloader通过接口可以获取main里面的内容。
二:PreloaderHandoverEvent实现preloaderNotification,然后main把node保存到PreloaderHandoverEvent类中,然后调用notifyPreloader方法,而preloader通过handleApplicationNotification(PreloaderNotification info)获取 final PreloaderHandoverEvent event = (PreloaderHandoverEvent)info;该实现类,然后获取node。
这里有很多javafx的小游戏,一个高手写的
[url]http://lustrezhang.gotoip4.com/fxgame/[/url]
这里有个javafx学习的中文网站,我把内容都丢那上面去了。
http://www.jfxee.com/