Java: JavaFX桌面GUI开发
发布日期:2021-07-01 06:06:38 浏览次数:2 分类:技术文章

本文共 7333 字,大约阅读时间需要 24 分钟。

1、基本概念

窗口          Stage  -场景       Scene    -布局     stackPane      -控件   Button

2、最小框架代码

创建命令行应用

package com.company;import javafx.application.Application;import javafx.stage.Stage;public class HelloWorld extends Application {
@Override public void start(Stage primaryStage) throws Exception {
primaryStage.show(); } public static void main(String[] args) {
launch(args); }}

对就是啥都没有,空白的窗体

在这里插入图片描述

3、控件布局

package com.company;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.StackPane;import javafx.stage.Stage;public class Main extends Application {
public static void main(String[] args) {
launch(args); } @Override public void start(Stage primaryStage) throws Exception {
// 实例化按钮 Button button = new Button("这是按钮上的文字"); // 创建布局控件 StackPane stackPane = new StackPane(); // 将button添加到布局 stackPane.getChildren().add(button); // 创建场景 宽=400 高=400 Scene scene = new Scene(stackPane, 400, 400); // 将场景添加到窗口 primaryStage.setScene(scene); // 显示窗口 primaryStage.show(); }}

在这里插入图片描述

4、事件添加

Main.java

package com.company;import javafx.application.Application;import javafx.event.EventHandler;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.input.MouseEvent;import javafx.scene.layout.StackPane;import javafx.stage.Stage;public class Main extends Application implements EventHandler
{
private Button button; public static void main(String[] args) {
// write your code here// System.out.println("你好"); launch(args); } @Override public void start(Stage primaryStage) throws Exception {
// 实例化按钮 button = new Button("这是按钮"); // 1、添加按钮点击事件, this.handle 处理事件// button.setOnMouseClicked(this);// 2、使用单独实现的类 事件监听// button.setOnMouseClicked(new MyMouseEvent());// 3、使用匿名类添加事件监听 button.setOnMouseClicked(new EventHandler
() {
@Override public void handle(MouseEvent event) {
System.out.println("鼠标点击按钮了"); } });// 4、jdk 8 使用简写执行一条输出 button.setOnMouseClicked(e -> System.out.println("简写的监听事件"));// 5、同时输出多条 button.setOnMouseClicked(e -> {
System.out.println("简写的监听事件1"); System.out.println("简写的监听事件2"); }); // 创建布局控件 StackPane stackPane = new StackPane(); // 将button添加到布局 stackPane.getChildren().add(button); // 创建场景 Scene scene = new Scene(stackPane, 400, 400); // 给场景添加事件处理的对象// scene.setOnMousePressed(this); scene.setOnMousePressed(new MySceneMouseEvent()); // 将场景添加到窗口 primaryStage.setScene(scene); // 显示窗口 primaryStage.show(); } @Override public void handle(MouseEvent event) {
// event.getSource() 获取事件对象 if (event.getSource() == button) {
System.out.println("点击了按钮"); } else {
System.out.println("点击了场景"); } }}

MyMouseEvent.java 处理鼠标点击事件的类

package com.company;import javafx.event.EventHandler;import javafx.scene.input.MouseEvent;public class MyMouseEvent implements EventHandler
{
@Override public void handle(MouseEvent event) {
System.out.println("MyMouseEvent click"); }}

MySceneMouseEvent.java 处理场景点击事件的类

package com.company;import javafx.event.EventHandler;import javafx.scene.input.MouseEvent;public class MySceneMouseEvent implements EventHandler
{
@Override public void handle(MouseEvent event) {
System.out.println("场景鼠标点击"); }}

5、场景切换

package com.company;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.StackPane;import javafx.scene.layout.VBox;import javafx.stage.Stage;public class SceneChange extends Application {
Scene scene1, scene2; public static void main(String[] args) {
launch(args); } @Override public void start(Stage primaryStage) throws Exception {
// 场景1 Button button1 = new Button("场景1 的button"); // 事件监听 点击后切换到场景2 button1.setOnMouseClicked(e -> {
primaryStage.setScene(scene2); }); VBox vBox = new VBox(); vBox.getChildren().add(button1); scene1 = new Scene(vBox, 400, 400); // 场景2 Button button2 = new Button("场景2 的button"); // 事件监听 点击后切换到场景1 button2.setOnMouseClicked(e -> {
primaryStage.setScene(scene1); }); StackPane stackPane = new StackPane(); stackPane.getChildren().add(button2); scene2 = new Scene(stackPane, 400, 400); primaryStage.setScene(scene1); primaryStage.show(); }}

在这里插入图片描述

在这里插入图片描述

6、窗体切换

Main.java

package com.company;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.VBox;import javafx.stage.Stage;public class Main extends Application {
private Stage stage; @Override public void start(Stage primaryStage) throws Exception {
stage = primaryStage; // 窗口点击叉号关闭询问 stage.setOnCloseRequest(event -> {
event.consume(); // 消除默认事件 handleClose(); }); // 布局 Button button = new Button("关闭窗口"); // 鼠标点击关闭窗口 button.setOnMouseClicked(event -> handleClose()); VBox vBox = new VBox(); vBox.getChildren().add(button); Scene scene = new Scene(vBox, 400, 400); stage.setScene(scene); stage.show(); } public void handleClose() {
// 接收窗体返回值 boolean ret = WindowAlert.display("关闭窗口", "是否关闭窗口?"); System.out.println(ret); if (ret) {
stage.close(); } } public static void main(String[] args) {
launch(args); }}

WindowAlert.java

package com.company;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.Label;import javafx.scene.layout.VBox;import javafx.stage.Modality;import javafx.stage.Stage;public class WindowAlert {
public static boolean answer; /** * @param title 标题 * @param msg 消息 */ public static boolean display(String title, String msg) {
// 创建舞台 Stage stage = new Stage(); // 设置显示模式 stage.initModality(Modality.APPLICATION_MODAL); stage.setTitle(title); // 创建控件 Button buttonYes = new Button("是"); buttonYes.setOnMouseClicked(event -> {
answer = true; stage.close(); }); Button buttonNo = new Button("否"); buttonNo.setOnMouseClicked(event -> {
answer = false; stage.close(); }); Label label = new Label(msg); // 创建布局 VBox vBox = new VBox(); vBox.getChildren().addAll(label, buttonYes, buttonNo); vBox.setAlignment(Pos.CENTER); // 布局居中显示 // 创建场景 Scene scene = new Scene(vBox, 200, 200); // 显示舞台 stage.setScene(scene);// stage.show(); stage.showAndWait(); // 等待窗体关闭才继续 // 窗体返回值 return answer; }}

在这里插入图片描述

转载地址:https://pengshiyu.blog.csdn.net/article/details/100186537 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java:JavaFX项目FXML文件应用实例
下一篇:JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月16日 05时59分27秒