javaFX基础
⦁ javaFx基础
⦁ 一、javaFx基础
⦁ 1.javaFx生命周期
⦁ Application.init() 应用启动前通过launcher thread调用
⦁ Application.start(Stage stage) 开启应用的方法,方法中定义各种屏幕场景
⦁ Application.stop() 方法在应用被关闭时触发(如关闭屏幕按钮)
⦁ 启动的大体过程:main方法中调用静态方法lauch(),该方法在内部创建javaFx所需线程,开启生命周期等
⦁ 2.Stage Class用来定义UI界面,继承在Window
⦁ (1)stage 常用属性:fullScreen fullScreenExitHint退出按键 fullScreenExitHint退出提示; titil,width,height等;其父类window还有其他一些UI相关属性;
⦁ (2)所有属性都有getter和setter,但是并非是pojo那种
(3)Stage.initStyle(StageStyle.UNIFIED);设置基础样式
⦁ 3.javaFx工具包的设计
⦁ (1)大概分三层: 本地层(类似于native方法),私有层,公共层,开发只用到公共层类和方法,原生和私有不用
·
三、Scene Graph 场景图
1.场景图中节点的包含关系,即一个javafx 的结构
eg: 对应代码结构
HBox hBox = new HBox(); //继承parent
hBox.getChildren().add(new Button("Button1"));//添加节点
Scene scene = new Scene(hBox);//scene中添加parent
stage.setScene(scene)//stage中set一个scene
2.事件处理:
i.所有输入事件都继承自InputEvent类添加事件过滤器时可选择不同类型事件进行监听处理
eg:
scene.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
scene.setFill(Color.GREEN);
System.out.println(scene.getFill());
});
3.布局窗格
Region 继承parent ,Pane继承Region,HBOx等布局元素继承Pane
4.Node基本属性,一些简单应用
eg:
HBox hBox = new HBox();
/*字体居中*/
hBox.setAlignment(Pos.CENTER);
//内容的水平间距
hBox.setSpacing(24);
Button myButton = new Button("!press me");
//设置节点的唯一id
myButton.setId("myButton");
CheckBox checkBox = new CheckBox();
//设置不透明度
checkBox.setOpacity(0.7);
/*映射,设置倒映*/
checkBox.setEffect(new Reflection());
/*鼠标点击事件*/
myButton.setOnMouseClicked(event -> {
this.checkBoxShow(scene,checkBox.getId());
});
//设置任意点击事件、接触事件、按键事件等
checkBox.setOnAction(event -> {
myButton.setVisible(!myButton.isVisible());
});
//通过id找scene中某个节点
Node node = scene.lookup("#" + id);
//设置节点可见性
node.setVisible(!node.isVisible());
四、场景图中布局和转换节点
1 添加转化 scene支持四种
Scaling 缩放、Rotation旋转、Translation平移 、Shearing剪切、Affine放射
eg:
Button button = new Button("买它!");
//布局,将子元素布局在上下左右中几个方向上
BorderPane borderPane = new BorderPane();
borderPane.setCenter(button);
//缩放和旋转需要定义滑块,除非可触摸设备,这里定义滑块最小最大和初始值
Slider sliderZoom = new Slider(0.1,2,1);
/*这里定义的本身就是缩放比例,而非尺寸,这里是实现大小缩放的关键。通过滑块控制缩放属性值*/
sliderZoom.valueProperty().addListener(e->{
button.setScaleY(sliderZoom.getValue());
button.setScaleX(sliderZoom.getValue());
});