JavaFx 实现软件启动页

Hello,大家好,我是78KgMiao

场景分析

当我们做一款成熟的客户端软件时,一般会在软件打开之前进行一些初始化操作。比如:初始化目录初始化系统配置版本检测等。
这时就需要一个软件启动页来过渡场景的切换,在启动页展示产品的设计理念,同时在后台进行软件初始化操作。
Eclipse简直不要太爽。

运行效果

运行效果截图

代码案例

package mqx;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;

/**
 * 启动页案例
 * 
 * @author Miaoqx
 */
public class Loading extends Application {

	private static Label infoLb;

	@Override
	public void start(Stage stage) throws Exception {
		Image image = new Image("https://img-blog.csdnimg.cn/20200927152800323.png");
		ImageView view = new ImageView(image);

		infoLb = new Label();
		infoLb.setTextFill(Color.WHITE);
		AnchorPane.setRightAnchor(infoLb, 10.0);
		AnchorPane.setBottomAnchor(infoLb, 10.0);

		AnchorPane page = new AnchorPane();
		page.getChildren().addAll(view, infoLb);

		stage.setTitle("eclipse");
		stage.setScene(new Scene(page));
		stage.setWidth(image.getWidth());
		stage.setHeight(image.getHeight());
		stage.initStyle(StageStyle.UNDECORATED);
		stage.getIcons().add(new Image("https://img-blog.csdnimg.cn/20200927163943686.png"));
		stage.show();

		// 核心代码
		new Thread(() -> {
			initSystem();// 1

			Platform.runLater(() -> {// 2
				try {
					Home home = new Home();

					home.addEventHandler(WindowEvent.WINDOW_SHOWN, event -> {
						stage.hide();
					});
					home.show();
				} catch (Throwable e) {
					e.printStackTrace();// 3
				}
			});
		}).start();
	}

	// 初始化系统
	private void initSystem() {
		try {
			showInfo("初始化目录...");
			Thread.sleep(1500);
			showInfo("初始化系统配置...");
			Thread.sleep(1500);
			showInfo("版本检测...");
			Thread.sleep(1500);
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}

	// 显示信息
	public static void showInfo(String info) {
		Platform.runLater(() -> infoLb.setText(info));
	}

	/**
	 * 主页
	 * 
	 * @author Miaoqx
	 */
	public class Home extends Stage {

		public Home() {
			Pane pane = new Pane();
			pane.getChildren().add(new Label("Hello, I'm 78KgMiao."));

			setScene(new Scene(pane));
			setTitle("Home");
			setMaximized(true);
			getIcons().add(new Image("https://img-blog.csdnimg.cn/20200927163943686.png"));
		}
	}

	public static void main(String[] args) {
		launch(args);
	}
}

代码解析

  • 注释 1:在启动页打开后。开启新线程,进行软件初始化从操作。期间可以调用Loading.showInfo()方法刷新启动信息或者启动进度。
  • 注释 2:在初始化操作完成后。打开主页。这里并没有直接关闭启动页,而是给主页添加WindowEvent.WINDOW_SHOWN事件,在主页显示完成后再关闭启动页。
  • 注释 3:用于处理异常。如果主页打开失败,是否需要退出软件,或者执行其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值