JavaFX实现界面跳转

界面跳转,很常见的一个功能,在桌面程序中,可以多窗口跳转,也可以在一个窗口中跳转。不同方式对应不同场景。下面简单介绍一下,JavaFX中单窗口界面跳转方式。

BorderPane 跳转

利用BorderPane的setCenter重新设置中心节点进行界面跳转。

好处是其他区域的节点不会更新,只会更新center中的节点,并且可以控制是每个页面是否可以重新加载,方便。

scene节点如下,在BorderPane的top中设置按钮事件,更新center。

fxml

<BorderPane prefHeight="200.0" prefWidth="200.0" fx:id="container">
         <top>
            <HBox alignment="CENTER" spacing="20.0" BorderPane.alignment="CENTER">
               <children>
                  <Button mnemonicParsing="false" text="首页" onAction="#toHome" />
                  <Button mnemonicParsing="false" text="文件" onAction="#toFile"/>
                  <Button mnemonicParsing="false" text="设置" onAction="#toSetting"/>
               </children>
               <padding>
                  <Insets bottom="10.0" top="10.0" />
               </padding>
            </HBox>
         </top>
         <center>
  </center>
</BorderPane>

controller

public class JumpController {

    public BorderPane container;

    public void initialize() {
        URL resource = getClass().getResource("/fxml/jump/home.fxml");
        try {
            setCenter(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void setCenter(URL url) throws IOException {
        FXMLLoader loader = new FXMLLoader(url);
        loader.load();
        Parent root = loader.getRoot();
        container.setCenter(root);
    }

    public void toHome(ActionEvent event) {
        URL resource = getClass().getResource("/fxml/jump/home.fxml");
        try {
            setCenter(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void toFile(ActionEvent event) {
        URL resource = getClass().getResource("/fxml/jump/file.fxml");
        try {
            setCenter(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void toSetting(ActionEvent event) {
        URL resource = getClass().getResource("/fxml/jump/setting.fxml");
        try {
            setCenter(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

StackPane跳转

StackPane也是JavaFX中的一个面板容器,特点是里面的元素是堆叠在一起的,每次只显示最上层元素。利用这个特点,可以把多个界面加载之后作为StackPane的字节的,然后调整StackPane的顶层元素即可。

这种方法比较适合每个页面跳转时不需要重新加载的情况,效率比较高,只是改变字节点的顺序。

fxml

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="529.0" prefWidth="785.0"
      xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="xyz.yuelai.controller.Jump1Controller">
   <HBox alignment="CENTER" spacing="20.0">
      <children>
         <Button mnemonicParsing="false" onAction="#toHome" text="首页" />
         <Button mnemonicParsing="false" onAction="#toFile" text="文件" />
         <Button mnemonicParsing="false" onAction="#toSetting" text="设置" />
      </children>
      <padding>
         <Insets bottom="10.0" top="10.0" />
      </padding>
   </HBox>
   <StackPane prefHeight="150.0" prefWidth="200.0" VBox.vgrow="ALWAYS" fx:id="container" />

</VBox>

controller

public class Jump1Controller {

    public StackPane container;
    private Parent home;
    private Parent file;
    private Parent setting;

    public void initialize() {
        try {
            URL homeUrl = getClass().getResource("/fxml/jump/home.fxml");
            home = getParent(homeUrl);
            URL fileUrl = getClass().getResource("/fxml/jump/file.fxml");
            file = getParent(fileUrl);
            URL settingUrl = getClass().getResource("/fxml/jump/setting.fxml");
            setting = getParent(settingUrl);

            container.getChildren().addAll(setting, file, home);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private Parent getParent(URL url) throws IOException {
        FXMLLoader loader = new FXMLLoader(url);
        return loader.load();
    }

    public void toHome(ActionEvent event) {
        home.toFront();
    }

    public void toFile(ActionEvent event) {
        file.toFront();
    }

    public void toSetting(ActionEvent event) {
        setting.toFront();
    }
}

三个界面的fxml如下:

首页

<AnchorPane prefHeight="460.0" prefWidth="781.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label alignment="CENTER" layoutX="297.0" layoutY="131.0" prefHeight="110.0" prefWidth="129.0" style="-fx-background-color: #a00;" text="首页" textFill="WHITE" AnchorPane.leftAnchor="200.0" AnchorPane.rightAnchor="200.0" AnchorPane.topAnchor="100.0">
         <font>
            <Font name="System Bold" size="20.0" />
         </font>
      </Label>
   </children>
</AnchorPane>

文件

<AnchorPane prefHeight="460.0" prefWidth="781.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <Label alignment="CENTER" layoutX="297.0" layoutY="131.0" prefHeight="110.0" prefWidth="129.0" style="-fx-background-color: #0a0;" text="文件" textFill="WHITE" AnchorPane.leftAnchor="200.0" AnchorPane.rightAnchor="200.0" AnchorPane.topAnchor="100.0">
            <font>
                <Font name="System Bold" size="20.0" />
            </font>
        </Label>
    </children>
</AnchorPane>

设置

<AnchorPane prefHeight="460.0" prefWidth="781.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <Label alignment="CENTER" layoutX="297.0" layoutY="131.0" prefHeight="110.0" prefWidth="129.0" style="-fx-background-color: #00a;" text="设置" textFill="WHITE" AnchorPane.leftAnchor="200.0" AnchorPane.rightAnchor="200.0" AnchorPane.topAnchor="100.0">
            <font>
                <Font name="System Bold" size="20.0" />
            </font>
        </Label>
    </children>
</AnchorPane>

其他跳转方式,比如重新设置scene,这就相当于重新加载当前窗口,如非必要还是不推荐。上面两种方式都是操作的容器里面的节点。实现了视觉上的界面跳转。所以不局限于BorderPane和StackPane,只是这两个容器用起来比较方便。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java后台实现js关闭本页面,父页面指定跳转或刷新操作

    关闭本页面,跳转到百度 response.setCharacterEncoding("gbk"); PrintWriter out=response.getWriter(); out.print("<script>alert('报告生成成功);</script>"); out.print("<script>self.opener.location.href = 'http://www.baidu.com';window.

  • java servlet 几种页面跳转的方法

    Servlet: 当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面. 1) redirect 方式 response.sendRedirect("/a.jsp"); 页面的路径是相对路径.sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如: response.sendRedirect("http://www.jb51.net"); 跳转后浏览器地址栏变化. 这种方式要传值出去的话,只能在url中带param

  • JavaFx实现登录成功跳转到程序主页面

    本文实例为大家分享了JavaFx实现登录成功跳转到程序主页面的具体代码,供大家参考,具体内容如下 1.需求 登录页面在输入账号密码之后,验证账号密码时候正确,正确就跳转到应用程序的首页.文笔不行,可能没怎么写清楚,欢迎在下面讨论 效果如下图: 2.实现 1).LoginApplication为启动类,启动之后进入到登录页面 public class LoginApplication extends Application {     @Override     public void start

  • Java实现注册登录跳转

    本文实例为大家分享了Java实现注册登录跳转的具体代码,供大家参考,具体内容如下 创建数据库,创建一个登录表login存储用户的用户名和密码,使用sql insert语句将注册的信息插入到数据库中,使用sql select语句查询用户名和密码是否存在数据库的login表中,实现登录功能. 依赖 <dependencies>         <dependency>             <groupId>mysql</groupId>          

  • Java 在PDF中添加页面跳转按钮功能(代码演示)

    在PDF 中可通过按钮来添加动作跳转到指定页面,包括跳转到文档首页.文档末页.跳转到上一页.下一页.或跳转到指定页面等.下面将通过java代码来演示如何添加具有以上几种功能的按钮. 使用工具: Free Spire.PDF for Java (免费版) IntelliJ IDEA Jar文件获取及导入: 方法1:通过官网下载jar文件包.下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入java程序.参考如下导入效果: 方法2: 可通过maven仓库安装导入. Java 代

  • JavaFX实现界面跳转

    界面跳转,很常见的一个功能,在桌面程序中,可以多窗口跳转,也可以在一个窗口中跳转.不同方式对应不同场景.下面简单介绍一下,JavaFX中单窗口界面跳转方式. BorderPane 跳转 利用BorderPane的setCenter重新设置中心节点进行界面跳转. 好处是其他区域的节点不会更新,只会更新center中的节点,并且可以控制是每个页面是否可以重新加载,方便. scene节点如下,在BorderPane的top中设置按钮事件,更新center. fxml <BorderPane prefH

  • iOS界面跳转时导航栏和tabBar的隐藏与显示功能

    一.当A页面要push到B页面,需要将B页面的导航栏隐藏时,我们只需要在A页面中重写以下两个方法: override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } override func viewWillDisappear(animated: Bool)

  • 浅谈angularJS2中的界面跳转方法

    链接参数数组保存路由导航时所需的成分: 指向目标组件的那个路由的路径(path) 必备路由参数和可选路由参数,它们将进入该路由的URL 我们可以把RouterLink指令绑定到一个数组,就像这样: <a [routerLink]="['/heroes']">Heroes</a> 在指定路由参数时,我们写过一个双元素的数组,就像这样: this.router.navigate(['/hero', hero.id]); 我们可以在对象中提供可选的路由参数,就像这样:

  • python wxpython 实现界面跳转功能

    用wxpython设计界面时可能会出现界面嵌套的情况 这样就需要进行界面的跳转 但是貌似wxpython没提供界面跳转的方式(也可能是我菜...) 所以就需要借助threading模块 主要思想: 注:该代码为源码的一部分,经过删减可能会导致程序错误,但 主要是通过一个按钮进行跳转,在点击该按钮时关闭当前界面,打开新界面.. 主要函数doClose  按钮触发的函数QU import wx import pymysql,time,threading from MySQL import Make_

  • Android实现界面跳转功能

    本文实例为大家分享了Android实现界面跳转的具体代码,供大家参考,具体内容如下 布局 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schem

  • Java界面编程实现界面跳转

    本文实例为大家分享了Java界面编程实现界面跳转的具体代码,供大家参考,具体内容如下 在事件处理中创建对象 public void actionPerformed(ActionEvent e)             {                 QQ1 qq1=new QQ1();//为跳转的界面               } 步骤: 在主函数中创建一个主窗口的对象 package 界面编程7;   public class QQmain {       public static v

  • 详解js界面跳转与值传递

    本文实例实现的功能如下:注册页(Register.js),点击注册,跳到注册结果页(RegisterResult.js),并将注册的手机号传递过去,显示xx注册成功. index.Android.js 'use strict' import React, { Component } from 'react'; import { AppRegistry,Navigator,BackAndroid} from 'react-native'; var Register = require('./stu

  • Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转

    需求:Activity(fragment)跳转的时候当前界面裂开,上下各自拉出手机屏幕,之后跳转到相对应的Activity.整体效果图如下 思路:1,在当前Activity中截取当前手机的屏幕获取到bitmap,然后根据具体位置(比如这里是扫码图标中间裂开)计算获取到,中间裂开距离手机上和下的距离,在传递给跳转后的Activity (跳转前的Activity做两件事情,1,截取屏幕获取bitmap2,计算出具体裂开位置距离屏幕上下的距离,传递给第二个activity方便来切割真个截图) 2,跳转

  • PyQt5实现界面(页面)跳转的示例代码

    网上关于PyQt5的教程很少,特别是界面跳转这一块儿,自己研究了半天,下来和大家分享一下 一.首先是主界面 # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'Form.ui' # # Created by: PyQt5 UI code generator 5.10.1 # # WARNING! All changes made in this file will be lost! #要注意的

  • Java8新特性之JavaFX 8_动力节点Java学院整理

    JavaFX主要致力于富客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio,video,graphic,animation,3D等,同时采用现代化的css方式支持界面设计.同时又采用XUI方式以XML方式设计UI界面,达到显示与逻辑的分离.与android这方面确实有点相似性. JavaFX历史 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上

随机推荐