javaFX基础

1.什么是javaFX?

  • JavaFX 是用于创建富互联网应用程序(Rich Internet Applications,RIA)的一个 Java 库,它为开发者提供了创建具有视觉吸引力、交互式用户界面(UI)的工具和 API。

  • 使用JavaFX开发的应用程序可以在各种设备上运行,如台式计算机,手机,电视,平板电脑等。 要使用Java编程语言开发GUI应用程序,程序员依赖于诸如高级窗口工具包(AWT)和Swings之类的库。 在JavaFX出现之后,这些Java程序开发就可以有效地利用丰富的类库来开发GUI应用程序

2.怎么使用javaFX

  • Application 是 JavaFX 程序的入口,任何 JavaFX 应用程序程序都要继承该类并重写 start() 方法 通过 main() 执行 Application 的 launch() 方法

  • launch 方法会默认执行该类下的 init() 、 start() 、 stop() 方法

  • 方法执行后的显示顺序为: init() 方法➡ start() 方法➡ stop() 方法

@Override
public void init() throws Exception {
   super.init();
}
@Override
public void start(Stage primaryStage) {
}
@Override
public void stop() throws Exception {
    super.stop();
}

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene
public class Main extends Application{
    @Override
    public void start(Stage stage) throws Exception{
        //1.继承Application
        //2.重写start方法
        //3.设置窗体标题
        stage.setTitle("窗体")
        //4.创建布局-网格布局
        GridPane gp =new GridPane();
        //5.创建舞台,并指定布局,宽500,高500
        Scene sc=new Scene(gp,500,500)
        //6.设置舞台到窗体
        stage.setScene(sc);
        //7.设置显示窗体
        stage.show(); 
        
        
    }
    //主函数,窗体没有主函数是不行的
    public static void main(String[] args){
        Application.launch()
    }
}


2.舞台、场景、布局、控件的基本介 绍

1.1 舞台(stage)

  • 舞台是 JavaFX 应用程序的顶级容器,它代表了应用程序的窗口。每个 JavaFX 应用程序至少有一个舞台,通常被称为主舞台。舞台可以包含一个场景,并且可以设置标题、大小、图标等属性。

import javafx.application.Application;
import javafx.stage.Stage;
public class StageExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 设置舞台标题
        primaryStage.setTitle("JavaFX Stage Example");
        // 显示舞台
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

1.2 场景(Scene)

  • 场景是舞台上显示的内容的容器,它包含了一个根节点(通常是一个布局)。一个舞台在同一时间只能显示一个场景,但可以通过切换场景来改变舞台上显示的内容。场景可以设置背景颜色、尺寸等属性。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class SceneExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 创建一个布局
        Pane root = new Pane();
        // 创建一个场景,将布局作为根节点
        Scene scene = new Scene(root, 400, 300);
        // 将场景设置到舞台上
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFX Scene Example");
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

1.3 布局(Layout)

  • 布局是用于管理控件在场景中排列方式的容器。JavaFX 提供了多种布局管理器,如VBox(垂直布局)、HBox(水平布局)、GridPane(网格布局)等。

// 创建一个垂直布局
        VBox vbox = new VBox();
        // 创建一个标签
        Label label = new Label("Hello, JavaFX!");
        // 将标签添加到布局中
        vbox.getChildren().add(label);
        // 创建一个场景,将布局作为根节点
        Scene scene = new Scene(vbox, 200, 100);
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFX Layout Example");
        primaryStage.show();

  • 网格布局(GridPane)
    GridPane gp=new GridPane

  • 流式布局(FlowPane)
    FlowPane fp=new FlowPane()

  • 边框布局(BorderPane)
    BorderPane bp=new BorderPane()

  • 水平布局(HBox)
    HBox hb = new HBox();
    

  • 垂直布局(VBox)
    VBox vb = new VBox();
    

  • 表格布局(TableView)
    TableView<Student> tv=new TableView<>();
    

  • 设置布局居中(setAlignment

    布局对象名.setAlignment(Pos.CENTER)
    
  • 设置边距

    垂直:布局对象名.setVgap(距离)
    水平:布局对象名.setHgap(距离)
    

1.4 控件

  • 标签(Label)
    • 标签用于显示文本信息,通常用于提示用户或显示一些静态文本。

    		//布局
    		VBox vbox = new VBox();
            // 创建一个标签
            Label label = new Label("This is a label.");
            vbox.getChildren().add(label);
    

  • 文本框(TextField)
    • 文本框用于接收用户输入的单行文本。

       		// 创建一个文本框
              TextField textField = new TextField();
              vbox.getChildren().add(textField);
      
    • 文本框中的提示语

      文本框对象名.setPromptText(“提示语”)
      
    • 给文本框设置默认值

      文本框对象名.setText(最上面函数属性名.get要获取的属性())
      
    • 整数类型的文本框默认值

      文本框名.setText(函数上面那个属性名.get编号()+"")
      
    • 设置不可编辑

      文本框名.setEditable(false)
      

  • 密码框(PasswordField)
    • 密码框用于接收用户输入的密码,输入的文本会以星号或圆点的形式显示。

      		// 创建一个密码框
              PasswordField passwordField = new PasswordField();
              vbox.getChildren().add(passwordField);
      

  • 按钮(Button)
    • 按钮用于触发特定的操作,用户点击按钮时会执行相应的事件处理程序。

      // 创建一个按钮
              Button button = new Button("Click me!");
              // 为按钮添加点击事件处理程序
              button.setOnAction(e -> System.out.println("Button clicked!"));
              vbox.getChildren().add(button);
      
    • 单选按钮(RadioButton)

      • 用于提供一组互斥的选项,用户只能从这组选项中选择一个。通常会使用 ToggleGroup 来管理单选按钮,确保同一组内只有一个单选按钮可以被选中。

      • 基本使用步骤

        1. 创建 ToggleGroup:用于管理一组单选按钮,保证同一时间只有一个单选按钮被选中。

        2. 创建 RadioButton:创建多个单选按钮实例。

        3. 将单选按钮添加到 ToggleGroup:通过 setToggleGroup 方法将每个单选按钮添加到同一个 ToggleGroup 中。

        4. 添加到布局并显示:将单选按钮添加到合适的布局中,然后将布局添加到场景,最后显示舞台

        默认:按钮名.setSelected(true);

        // 创建一个 ToggleGroup 用于管理单选按钮
                ToggleGroup toggleGroup = new ToggleGroup();
                // 创建单选按钮
                RadioButton radioButton1 = new RadioButton("Option 1");
                RadioButton radioButton2 = new RadioButton("Option 2");
              
                // 将单选按钮添加到 ToggleGroup
                radioButton1.setToggleGroup(toggleGroup);
                radioButton2.setToggleGroup(toggleGroup);
                
                // 默认选中第一个单选按钮
                radioButton1.setSelected(true);
                // 将单选按钮添加到布局中
                vbox.getChildren().addAll(radioButton1, radioButton2);

    • 多选按钮

      • 它允许用户从一组选项中选择零个、一个或多个选项,每个多选按钮都是独立的,不会像单选按钮那样相互排斥

      • 基本使用步骤

        1. 创建 CheckBox 实例:为每个选项创建一个 CheckBox 对象。

        2. 添加到布局:把创建好的多选按钮添加到合适的布局容器中。

        3. 获取多选按钮

        4. 设置场景和舞台:将布局添加到场景,再把场景设置给舞台并显示

        // 创建一个垂直布局
                VBox vbox = new VBox();
        		// 创建多选按钮
                CheckBox checkBox1 = new CheckBox("Option 1");
                CheckBox checkBox2 = new CheckBox("Option 2");
               String 名=“”
                if(多选按钮名.isSelected()){
                 名=多选按钮值
                }if(多选按钮名.isSelected()){
                 名=多选按钮值
                }
                // 将多选按钮添加到布局中
                vbox.getChildren().addAll(checkBox1,checkBox2);

  • 下拉框
    • 它允许用户从一个预定义的列表中选择一个选项

    • 基本使用步骤

      1. 创建 ComboBox 实例:实例化一个 ComboBox 对象。

      2. 添加选项:向 ComboBox 中添加预定义的选项。

      3. 添加到布局:将 ComboBox 添加到合适的布局容器中。

      4. 设置场景和舞台:把布局添加到场景,再将场景设置给舞台并显示。

      方法一:
      // 创建一个 ObservableList 来存储下拉框的选项
              ObservableList<String> options = FXCollections.observableArrayList(
                      "Option 1",
                      "Option 2",
                      "Option 3"
              );
              // 创建 ComboBox 并将选项列表传递给它
              ComboBox<String> comboBox = new ComboBox<>(options);
              // 设置默认选中项
              comboBox.setValue("Option 1");
              // 将 ComboBox 添加到布局中
              vbox.getChildren().add(comboBox);
              
              
      -----------------------------------------------------        方法二:
              // 创建 ComboBox 
              ComboBox<String> comboBox = new ComboBox<>();
             {
             		//下拉框内容
             		comboBox.getItems().addAll('游泳','唱歌','排球');
             		 // 设置默认选中项
              	comboBox.setValue("Option 1");
             }
              // 将 ComboBox 添加到布局中
              vbox.getChildren().add(comboBox);
              //获取下拉框的值
              String values=comboBox.getValue;
              

  • 文本域
    • 文本域(TextArea)是一种用于输入和显示多行文本的控件。它适合处理大段的文本内容,比如用户输入的长篇评论、日志信息展示等

    • 基本使用步骤

      1. 创建 TextArea 实例:实例化一个 TextArea 对象。

      2. 添加到布局:把 TextArea 添加到合适的布局容器中。

      3. 设置场景和舞台:将布局添加到场景,再把场景设置给舞台并显示

      // 创建 TextArea 实例
              TextArea textArea = new TextArea();
              // 设置初始文本
              textArea.setText("This is an example of JavaFX TextArea.\nYou can type multiple lines here.");
              
              //设置文本域的行数和列数
              textArea.setPrefRowCount(5); // 设置首选的行数
      		textArea.setPrefColumnCount(20); // 设置首选的列数
      		
      		//设置文本域的高和宽
      		textArea.setPrefWidth(20);//宽
      		textArea.setPrefHeight(100);//高
      		
      		
      		//设置文本域的滚动条策略
               textArea.setScrollTop(ScrollPane.ScrollBarPolicy.ALWAYS); // 始终显示垂直滚动条
              textArea.setScrollLeft(ScrollPane.ScrollBarPolicy.AS_NEEDED); // 根据需要显示水平滚动条
              
              //获取文本域中的文本
              String currentText = textArea.getText();
              
              // 将 TextArea 添加到布局中
              vbox.getChildren().add(textArea);


2.流式布局

  • 概念
    • 流式布局(FlowPane)是一种常用的布局管理器,它会按照从左到右、从上到下的顺序依次排列子节点。当一行放不下所有子节点时,会自动换行继续排列

    • FlowPane flowPane = new FlowPane()

  • 设置水平和垂直间距
    flowPane.setHgap(10); // 设置水平间距为 10 像素
    flowPane.setVgap(10); // 设置垂直间距为 10 像素
    
  • 设置排列方向
    import javafx.geometry.Orientation;
    flowPane.setOrientation(Orientation.VERTICAL); // 设置排列方向为垂直方向
    
  • 设置对齐方式
    import javafx.geometry.Pos;
    flowPane.setAlignment(Pos.CENTER); // 设置子节点在 FlowPane 中的对齐方式为居中对齐
    

stage.setTitle("流式布局");
//布局对象-流式布局
FlowPane fp=new FlowPane();
//设置布局右上
fp.setAlignment(Pos.TOP_RIGHT);
//按钮组件
Buuton b1=new Button("点1");
Buuton b2=new Button("点2");
//把组件添加到布局对象中
fp.getChildren().addAll(b1,b2)


3.边框布局

  • 概念

    • 边框布局(BorderPane)是一种常用的布局管理器,它将界面划分为五个区域:顶部(TOP)、底部(BOTTOM)、左侧(LEFT)、右侧(RIGHT)和中心(CENTER)。每个区域只能放置一个子节点,适合构建具有明确区域划分的界面,例如包含菜单栏、工具栏、侧边栏和主内容区域的应用程序界面。

    • BorderPane borderPane = new BorderPane();

  • 基本使用步骤

    1. 创建 BorderPane 实例:实例化一个 BorderPane 对象。

    2. 创建子节点:创建要放置在各个区域的控件,如按钮、标签等。

    3. 将子节点添加到相应区域:使用 BorderPane 的方法将子节点添加到指定的区域。

    4. 添加到场景和舞台:将 BorderPane 添加到场景,再把场景设置给舞台并显示。

  // 创建一个 BorderPane 实例
        BorderPane borderPane = new BorderPane();
        // 创建放置在各个区域的按钮
        Button topButton = new Button("Top");
        Button bottomButton = new Button("Bottom");
        Button leftButton = new Button("Left");
        Button rightButton = new Button("Right");
        Button centerButton = new Button("Center");
        // 将按钮添加到 BorderPane 的相应区域
        borderPane.setTop(topButton);
        borderPane.setBottom(bottomButton);
        borderPane.setLeft(leftButton);
        borderPane.setRight(rightButton);
        borderPane.setCenter(centerButton);
        // 创建场景并将 BorderPane 作为根节点
        Scene scene = new Scene(borderPane, 400, 300);
        // 设置舞台的场景
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFX BorderPane Example");
        primaryStage.show();

  • 移除某个区域的子节点

    • 如果需要移除某个区域的子节点,可以将该区域设置为 null

      borderPane.setTop(null);
      
  • 区域嵌套布局

    • 可以在某个区域放置另一个布局容器,实现更复杂的界面布局。

      import javafx.scene.layout.VBox;
      // 创建一个 VBox 布局
      VBox vbox = new VBox();
      Button vboxButton1 = new Button("VBox Button 1");
      Button vboxButton2 = new Button("VBox Button 2");
      vbox.getChildren().addAll(vboxButton1, vboxButton2);
      // 将 VBox 布局添加到 BorderPane 的中心区域
      borderPane.setCenter(vbox);


4.点击事件

  • 点击事件是用户与界面交互时最常见的事件之一,它允许程序在用户点击某个控件(如按钮、菜单项等)时执行特定的操作。

  • 基本步骤

    1. 创建按钮:实例化一个 Button 对象。

    2. 设置点击事件处理程序:为按钮的 setOnAction 方法设置一个事件处理程序,该处理程序通常是一个实现了 EventHandler<ActionEvent> 接口的 lambda 表达式或匿名内部类。

    3. 添加到布局、场景和舞台:将按钮添加到布局中,再将布局添加到场景,最后将场景设置给舞台并显示

// 创建一个按钮
        Button button = new Button("Click me!");
        // 设置按钮的点击事件处理程序
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Button clicked!");
            }
        });
        // 也可以使用 lambda 表达式简化代码
        // button.setOnAction(event -> System.out.println("Button clicked!"));
        // 将按钮添加到布局中
        vbox.getChildren().add(button);

  • 菜单点击事件

    VBox vbox = new VBox();
            // 创建菜单栏
            MenuBar menuBar = new MenuBar();
            // 创建菜单
            Menu fileMenu = new Menu("File");
            // 创建菜单项
            MenuItem openMenuItem = new MenuItem("Open");
            // 设置菜单项的点击事件处理程序
            openMenuItem.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    System.out.println("Open menu item clicked!");
                }
            });
            // 将菜单项添加到菜单中
            fileMenu.getItems().add(openMenuItem);
            // 将菜单添加到菜单栏中
            menuBar.getMenus().add(fileMenu);
            // 将菜单栏添加到布局中
            vbox.getChildren().add(menuBar);
            Scene scene = new Scene(vbox, 300, 200);
            primaryStage.setScene(scene);
            primaryStage.setTitle("JavaFX MenuItem Click Event Example");
            primaryStage.show();

5.弹出框简介

弹出框(Dialog)是一种用于与用户进行交互、显示重要信息或获取用户输入的界面组件

5.1 信息对话框(Alert)
  • Alert 是 JavaFX 中最常用的用于显示信息的对话框,它可以显示不同类型的消息,如提示信息、警告信息、错误信息等,并且可以根据需要添加按钮供用户选择。

    // 创建一个信息类型的对话框
            Alert alert = new Alert(AlertType.INFORMATION);
            //设置标题、头部文本和内容文本:使用 setTitle、setHeaderText 和 setContentText 方法分别设置对话框的标题、头部文本和具体显示的内容。
            alert.setTitle("信息提示");
            alert.setHeaderText(null);
            alert.setContentText("这是一条信息提示消息!");
            // 显示对话框
            alert.showAndWait();

5.2 确定对话框
  • 确认对话框通常用于询问用户是否确认执行某个操作,用户可以选择 “是” 或 “否” 等选项

    // 创建一个确认类型的对话框
            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.setTitle("确认操作");
            alert.setHeaderText("你确定要执行此操作吗?");
            alert.setContentText("请选择是或否。");
            // 显示对话框并获取用户的选择
            Optional<ButtonType> result = alert.showAndWait();
            if (result.isPresent() && result.get() == ButtonType.OK) {
                System.out.println("用户选择了确认");
            } else {
                System.out.println("用户选择了取消");
            }

5.3 自定义对话框
  • 除了使用预定义类型的对话框,还可以创建自定义对话框来满足特定的需求,例如包含自定义输入字段、布局等。

    // 创建自定义对话框
            Dialog<String> dialog = new Dialog<>();
            //标题
            dialog.setTitle("自定义对话框");
            //头部文本
            dialog.setHeaderText("请输入你的姓名");
            // 创建按钮类型
            ButtonType confirmButtonType = new ButtonType("确认", ButtonBar.ButtonData.OK_DONE);
            //添加按钮类型
            dialog.getDialogPane().getButtonTypes().addAll(confirmButtonType, ButtonType.CANCEL);
            // 创建输入字段和标签
            GridPane grid = new GridPane();
            grid.setHgap(10);
            grid.setVgap(10);
            TextField nameField = new TextField();
            nameField.setPromptText("姓名");
            grid.add(new Label("姓名:"), 0, 0);
            grid.add(nameField, 1, 0);
            dialog.getDialogPane().setContent(grid);
            // 转换结果 setResultConverter
            dialog.setResultConverter(dialogButton -> {
                if (dialogButton == confirmButtonType) {
                    return nameField.getText();
                }
                return null;
            });
            // 显示对话框并获取结果
            Optional<String> result = dialog.showAndWait();
            result.ifPresent(name -> System.out.println("你输入的姓名是: " + name));
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值