javafx-stage概念详解和实践
theme: juejin
Stage (一个窗口)包含 JavaFX 应用程序的所有对象。它由Stage 包的类 javafx.stage. 主舞台(primary stage)由平台本身创建。创建的 Stage 对象作为参数传递给start() 的方法。额外的stage对象或许由平台构造。
JavaFx 应用程序结构
通常,JavaFX 应用程序将具有三个主要组件,即 Stage, Scene 和 Nodes。 如下图所示。
一个最基本主舞台的代码往往像下面这样,现在ChatGPT这么火,我们问问它吧!如下图所示。
但是我们还是需要贴一下我们的示例代码,以便下面的深入介绍!
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();
}
}
我们顺便看一下效果,如下图:
到此,我们了解到stage是一个窗口,窗口下面有一个场景scene,scene通过node节点树组成了一个javafx应用程序,但是这只是最简单的示例,想要完善和美化我们的应用,我们还需要学习很多!
接下来我们将从窗口由上到下介绍它的特性!
stage顶部状态栏
如上图所示,顶部分为两大块:左侧标题栏和右侧工具栏。
左侧标题栏
stage.getIcons().add(new Image("/resources/icon/icon.png")); //设置左上角图标
stage.setTitle("welcome to JavaFX"); //设置标题
右侧工具栏
stage.setIconified(true); //最小化窗口,相当于点击窗口上的最小化图标
stage.setMaximized(true); //最大化窗口,相当于点击窗口最大化图标
stage.close(); //关闭窗口,相当于点击窗口关闭图标
禁用顶部
stage.setResizable(false) //无法点击最大化图标达到禁用
StageStyle
设置方式如下:
stage.initStyle(StageStyle.TRANSPARENT);
stagestyle分别有以下属性
- Decorated 默认无变化
- Undecorated 隐藏顶部状态
- Transparent 隐藏顶部状态,如不支持就设置为StageStyle.UNDECORATED
- Unified 无变化,如果不支持就设置为StageStyle.DECORATED
- Utility 隐藏顶部图标、缩小和放大按钮
分别对应以下结果 ,如下图,Decorated默认效果,在这里不展示了。
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);
转载自:https://juejin.cn/post/7221792648541192253