likes
comments
collection
share

javafx-stage概念详解和实践

作者站长头像
站长
· 阅读数 25

theme: juejin

Stage (一个窗口)包含 JavaFX 应用程序的所有对象。它由Stage 包的类 javafx.stage. 主舞台(primary stage)由平台本身创建。创建的 Stage 对象作为参数传递给start()  的方法。额外的stage对象或许由平台构造。

JavaFx 应用程序结构

通常,JavaFX 应用程序将具有三个主要组件,即 Stage, Scene 和 Nodes。 如下图所示。 javafx-stage概念详解和实践

一个最基本主舞台的代码往往像下面这样,现在ChatGPT这么火,我们问问它吧!如下图所示。

javafx-stage概念详解和实践

但是我们还是需要贴一下我们的示例代码,以便下面的深入介绍!

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Test extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        Text text = new Text(10, 40, "Hello World!");
        text.setFont(new Font(40));
        Scene scene = new Scene(new Group(text),300,300);

        primaryStage.setTitle("Welcome to JavaFX!");
        primaryStage.setScene(scene);
        primaryStage.sizeToScene();
        primaryStage.show();
    }
}

我们顺便看一下效果,如下图:

javafx-stage概念详解和实践

到此,我们了解到stage是一个窗口,窗口下面有一个场景scene,scene通过node节点树组成了一个javafx应用程序,但是这只是最简单的示例,想要完善和美化我们的应用,我们还需要学习很多!

接下来我们将从窗口由上到下介绍它的特性!

stage顶部状态栏

javafx-stage概念详解和实践

如上图所示,顶部分为两大块:左侧标题栏和右侧工具栏。

左侧标题栏

stage.getIcons().add(new Image("/resources/icon/icon.png")); //设置左上角图标
stage.setTitle("welcome to JavaFX"); //设置标题

右侧工具栏

stage.setIconified(true); //最小化窗口,相当于点击窗口上的最小化图标

stage.setMaximized(true); //最大化窗口,相当于点击窗口最大化图标

stage.close(); //关闭窗口,相当于点击窗口关闭图标

禁用顶部

javafx-stage概念详解和实践

stage.setResizable(false) //无法点击最大化图标达到禁用

StageStyle

设置方式如下:

stage.initStyle(StageStyle.TRANSPARENT);

stagestyle分别有以下属性

  • Decorated 默认无变化
  • Undecorated 隐藏顶部状态
  • Transparent 隐藏顶部状态,如不支持就设置为StageStyle.UNDECORATED
  • Unified 无变化,如果不支持就设置为StageStyle.DECORATED
  • Utility 隐藏顶部图标、缩小和放大按钮

分别对应以下结果 ,如下图,Decorated默认效果,在这里不展示了。 javafx-stage概念详解和实践

javafx-stage概念详解和实践

javafx-stage概念详解和实践

stage其他属性介绍

//最小化
stage.setIconified(true);
//最大化
stage.setMaximized(true);
//关闭窗口
stage.close();
//设置大小范围
stage.setMaxHeight(100);
stage.setMinHeight(100);
//宽度设置同理
stage.widthProperty().addListener(new ChangeListener<Number>(){
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        //监听窗口属性
    }
});
//获得高度
stage.getHeight();

//设置是否可改变大小
stage.setResizable(false);

//设置全屏
stage.setFullScreen(true);
//设置场景Scene
stage.setScene(new Scene(new Pane()));
//透明度
stage.setOpacity(0.5);
//设置置顶
stage.setAlwaysOnTop(true);
//设置位于桌面屏幕坐标
stage.setX(100);