`

JavaFX学习之Preloader

阅读更多
  JavaFX在Application加载的时候提供了Proloader应用,可以展现loading process bar或者others notification。

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的小游戏,一个高手写的
http://lustrezhang.gotoip4.com/fxgame/

这里有个javafx学习的中文网站,我把内容都丢那上面去了。
http://www.jfxee.com/
  • 大小: 33.2 KB
分享到:
评论
1 楼 笑海人胜 2014-12-29  

相关推荐

    javaFX学习资料集

    本资料集包含了最新的JavaFX学习资源,旨在帮助开发者掌握这一强大的技术,以应对日益增长的跨平台应用需求。 JavaFX的核心特性包括: 1. **丰富的UI组件**:JavaFX提供了一套完整的、易于使用的UI控件,如按钮、...

    javaFx 学习--之布局菜单

    javaFx 学习--之布局菜单

    JavaFX学习之样例8

    这个"JavaFX学习之样例8"可能是一个教程或示例集合,用于教授如何使用JavaFX来创建一个特定的图形元素,比如时钟。在这个例子中,我们可能将学习如何利用JavaFX的图形和动画功能来构建一个可交互的模拟时钟。 首先...

    JavaFX学习资料总结

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的Java库。它提供了丰富的用户界面组件、强大的图形...通过学习和掌握JavaFX,开发者可以充分利用其丰富的特性,创建出具有吸引力和交互性的应用程序。

    javafx学习网站

    1. **JavaFXChina.Net**:该网站是国内知名的 JavaFX 学习资源站点之一,提供大量的教程和技术文档,适合初学者入门以及进阶学习。 - **主要特色**: - **详尽的文档**:涵盖 JavaFX 的各个方面,从基础概念到高级...

    JavaFX教程(学习资料)

    JavaFX教程;JavaFX教程;JavaFX教程JavaFX教程;

    wxh (JavaFX学习曲线日记

    JavaFX学习曲线日记

    javaFx 学习--之Adding Dynamic Behavior(加动态特性源码)

    这通常是学习JavaFX的第一步,通过这个例子,你可以理解如何启动JavaFX应用、创建控件并响应用户操作。 总之,JavaFX的动态行为主要包括事件处理、属性绑定和样式改变等方面。通过熟练掌握这些技术,开发者可以创建...

    javaFx 学习--之组件篇1(边框与布局管理1Label)

    javaFx 学习--之组件篇1(边框与布局管理1Label)

    javaFx 学习--入门示例程序的源码

    在"javaFx 学习--入门示例程序的源码"这个压缩包中,包含了一个名为"helloworld"的文件,这通常是一个初学者接触任何编程语言或库时的第一个示例。 HelloWorld 示例是编程领域的基础,它演示了如何在JavaFX中展示...

    javafx脚本语言中文学习文档

    javafx语言中文教程,内附代码,有助于学习理解!

    JAVAFX学习教材(英文)

    JavaFx 的官方入门教材,英文

    javafx菜单之多级菜单1

    javafx菜单之多级菜单1

    JavaFX2.0之CSS

    JavaFX2.0之CSS JavaFX是一种新兴的技术,用于制作精美的动态画面。本资源主要介绍JavaFX中的CSS样式设计,用于创建样式表和自定义外观设计。 JavaFX CSS是基于W3C的CSS版本2.1和部分扩展的第三版。JavaFX应用程序...

    JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello World演示源码

    在“JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello World演示源码”中,我们将主要探讨以下几个知识点: 1. **JavaFX环境搭建**: - 安装Java Development Kit (JDK):JavaFX不再包含在标准JDK中,因此需要...

    JavaFx 入门文档,JavaFx实例

    本文将深入探讨JavaFX的基础知识,包括其核心概念、开发环境的搭建、基本组件的使用,以及如何通过实例来学习和掌握JavaFX。 首先,JavaFX的核心概念主要包括场景(Scene)、舞台(Stage)、节点(Nodes)和布局...

    深入学习javaFx脚本语言

    深入学习JavaFX脚本语言,意味着我们将探讨其语法、特性以及如何利用它来构建动态的应用程序。 JavaFX最初引入了一种名为JavaFX Script的专用脚本语言,但后来在JavaFX 2.0中,JavaFX Script被Java API所取代,使得...

    javaFX Demo 模板案例

    如果这个Demo包含图形元素,我们可以学习到如何在JavaFX中绘制和操作2D或3D图形。 媒体支持是JavaFX的另一个亮点,它内置了对音频和视频播放的支持。`javafx.media`包提供了`MediaPlayer`和`MediaView`类,可以轻松...

    javafx-sdk-11.0.2

    2. **示例代码**:可能包含`samples`目录,其中提供了使用JavaFX编写的示例应用程序,帮助开发者理解和学习如何使用JavaFX进行开发。 3. **文档**:SDK可能还包括API文档,通常位于`docs`目录下,这对于查阅JavaFX...

Global site tag (gtag.js) - Google Analytics