一、基础使用
1、基础框架
新建一个类,继承 javafx.application.Application ,重写start(Stage stage) 方法,init和stop方法可选重写,然后使用main 方法执行 launch() 方法即可。
public class testApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
//设置标题
stage.setTitle("Hello!");
//显示窗口
stage.show();
}
@Override
public void init() throws Exception {
System.out.println("初始化方法");
super.init();
}
@Override
public void stop() throws Exception {
System.out.println("结束方法");
super.stop();
}
public static void main(String[] args) {
launch();
}
}
2、为窗口里面添加内容
public void start(Stage stage) throws IOException {
//标签
Label label = new Label("Hello World?");
//布局
BorderPane pane = new BorderPane(label);
//场景
Scene scene = new Scene(pane,300,300);
//将场景设置到窗口里
stage.setScene(scene);
//设置标题
stage.setTitle("Hello!");
//显示窗口
stage.show();
}
3、打开新的窗口
button1.setOnAction(e->{
Stage stage1 = new Stage();
AnchorPane root = new AnchorPane();
root.getChildren().add(new Label("测试"));
Scene scene = new Scene(root,200,200);
stage1.setScene(scene);
stage1.setTitle("窗口1");
stage1.initOwner(stage);
stage1.initModality(Modality.WINDOW_MODAL);
stage1.show();
});
二、参数详解
1、State详解
对应的是窗口,主要方法有:
//常用
stage.setTitle("标题");
stage.getIcons().add(new Image("images\\papa.jpg"));//设置左上角和系统状态栏显示图标
stage.setResizable(false);//设置不可以拖动改变窗口大小,默认为true,但是最小化和关闭按钮正常
//窗口样式,分5种
stage.initStyle(StageStyle.DECORATED);//默认
stage.initStyle(StageStyle.TRANSPARENT);//无上边标题栏,包括图标、标题、最小最大关闭按钮
stage.initStyle(StageStyle.UNDECORATED);//效果和TRANSPARENT一致
stage.initStyle(StageStyle.UNIFIED);//和DECORATED一致
stage.initStyle(StageStyle.UTILITY);//标题栏只有标题和关闭按钮,同时不在状态栏显示图标
//是否模态窗口,主要是主窗口点击按钮后弹出的弹窗的状态
stage.initModality(Modality.NONE);//非模态话窗口,点击同个按钮可以打开多个弹窗,弹窗与主窗口无不干扰
stage.initModality(Modality.APPLICATION_MODAL);//当前弹窗弹出时,本应用其他窗口全部禁用
stage1.initModality(Modality.WINDOW_MODAL);//点击按钮时设置stage1.initOwner(stage);设置父窗口为主窗口,那么,之前点击打开的弹窗可用,但父窗口不可用
//设置关闭时先提示是否退出程序,确认之后才会关闭程序
Platform.setImplicitExit(false);//取消操作系统默认退出动作,具体表现就是,点击窗口关闭按钮,窗口关闭,但是程序仍在运行
stage.setOnCloseRequest(e->{
e.consume();//取消弹窗默认关闭按钮事件
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("退出程序");
alert.setHeaderText(null);//中间头文字
alert.setContentText("您是否退出程序?");
Optional<ButtonType> result = alert.showAndWait();
if(result.get()==ButtonType.OK){
Platform.exit();//关闭窗口及程序
//stage.close();//仅仅关闭窗口,程序未退出
}
});
2、布局
//布局,分三种
Pane pane = new Pane();//元素需要使用button.setLayoutX(200);button.setLayoutY(150);定位位置
BorderPane = new BorderPane();//四个方向布局,一个元素时,默认居中
AnchorPane = new AnchorPane();//同Pane
3、Node UI 控件的通用属性
所有的控件,如Button、Label都是继承Node类,所以,大体都具有类似的一些通用常用属性。
1)设置样式
//类似于CSS的样式,区别是在样式前面加上"-fx-"
label.setStyle("-fx-background-color: red;-fx-border-color: blue;-fx-border-width: 3px;");
2)设置其他常用属性
label.setLayoutX(200);//设置X坐标
label.setLayoutY(150);//设置Y坐标
label.setPrefHeight(50);//高
label.setPrefWidth(100);//宽
label.setAlignment(Pos.CENTER);//文本对齐方式
label.setVisible(false);//隐藏
label.setOpacity(0.5);//设置透明度
label.setRotate(25);//设置旋转角度
label.setTranslateX(60);//横向移动60
label.setTranslateY(100);//纵向移动100
label.getScene();//获取放置label的场景
label.getParent();//获取父节点
4、控件的属性绑定和属性监听
所有控件的属性,都是继承自Property接口类
1)监听场景宽高,动态改变圆的中心轴
circle.centerXProperty().bind(scene.widthProperty().divide(2));
circle.centerYProperty().bind(scene.heightProperty().divide(2));
2)监听圆中心轴变动
circle.centerXProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
System.out.println("x轴中心的改变了,原来是:"+number+",现在是:"+t1);
}
});
三、小场景
1、使用默认浏览器打开网页
//按钮
Button button = new Button("打开百度网页");
button.setOnAction(e->{
//使用系统默认浏览器打开网页
getHostServices().showDocument("www.baidu.com");
});
2、点击按钮切换场景
button1.setOnAction(e->{
stage.setScene(scene1);
});
button2.setOnAction(e->{
stage.setScene(scene2);
});
3、修改鼠标图片,如在画图软件将鼠标替换成画笔
scene.setCursor(new ImageCursor(new Image("images\\papa.jpg")));