JavaFX实现界面跳转

网友投稿 390 2022-07-22


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

BorderPane 跳转

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

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

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

fxml

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

xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="xyz.yuelai.controller.Jump1Controller">

xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="xyz.yuelai.controller.Jump1Controller">

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();

avGfLCxjXZ }

}

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如下:

首页

文件

设置

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 多线程并发AbstractQueuedSynchronizer详情
下一篇:springboot集成redis存对象乱码的问题及解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~