一、安装Scene Builder

安装Scene Builder,下载网址https://openjfx.cn/,下载SceneBuilder-25.0.0.msi

 

如果安装过程中出现提示“The installer has encountered an unexpected error installingthis package. This may indicate a problem with thispackage. The error code is 2503.”这个错误代码 2503 是 Windows Installer(.msi安装程序)的一个典型权限问题。
解决方法之一(实操可行):通过命令行以管理员权限安装,步骤如下:

1、按 Win + X,选择"终端(管理员)"

2、在命令行中,切换到 .msi 文件所在目录

cd C:\Users\[你的用户名]\Downloads

3、根据弹出的安装指令一步步安装

msiexec /i 文件名.msi

 

二、javaFX+Scene Builder创建一个项目

1、Scene Builder

通过拖动绘制一个包含按钮、标签的场景,在“视图-显示示例控制器类骨架”中可以查看其代码(复制该代码,一会粘贴到HelloController.java文件中):

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class PleaseProvideControllerClassName {

    @FXML
    private Button bt1;

    @FXML
    void btAction(ActionEvent event) {

    }

}

将文件命名为Sc.fxml,临时保存在桌面

2、创建JavaFX项目

命名为testSc1,将刚才的html文件拖到resources资源的包路径下(如果不在资源下,可能会报错,参考上一篇文章)
  
涉及3个文件,代码分别如下:
(1)HelloApplication.java,注意第19行改为你的fxml文件名

package org.example.testsc1;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
    @Override
    public void start( Stage primaryStage) throws IOException {
       /* FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();*/
        Parent root = FXMLLoader.load(getClass().getResource("Sc.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300,275));
        primaryStage.show();
    }
    public static void main(String[] args){ launch(args);}
}

(2)HelloController,粘贴显示示例控制器类骨架中的代码

package org.example.testsc1;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

public class HelloController {
    /*
    @FXML
    private Label welcomeText;

    @FXML
    protected void onHelloButtonClick() {
        welcomeText.setText("Welcome to JavaFX Application!");
     */
    @FXML
    private Button bt1;

    @FXML
    void btAction(ActionEvent event) {
        System.out.println("您点击了hello按钮");
        System.out.println("JavaFX版本: " + System.getProperty("javafx.version"));
        System.out.println("Java版本: " + System.getProperty("java.version"));
    }
}

(3)Sc.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane fx:controller="org.example.testsc1.HelloController"
            maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
            prefHeight="328.0" prefWidth="480.0" 
            xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button fx:id="bt1" layoutX="155.0" layoutY="214.0" mnemonicParsing="false" onAction="#btAction" prefHeight="47.0" prefWidth="106.0" text="Button" />
      <Label contentDisplay="CENTER" layoutX="155.0" layoutY="136.0" prefHeight="41.0" prefWidth="106.0" text="hello world" textAlignment="CENTER">
         <font>
            <Font size="15.0" />
         </font>
      </Label>
   </children>
</AnchorPane>

相关问题:
如果报错Exception running application org.example.testsc1.HelloApplication,注意查看是不是JavaFX版本号和FXML版本号,比如我的JavaFX版本: 17.0.14,所以fxml文件中写“17”如下:

<AnchorPane ... xmlns="http://javafx.com/javafx/17" ...>

如果有控制器类,还需要添加控制器声明,比如我设置了按钮控制器btAction,若以如下:

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
           prefHeight="328.0" prefWidth="480.0" 
           xmlns="http://javafx.com/javafx" 
           xmlns:fx="http://javafx.com/fxml"
           fx:controller="org.example.testsc1.HelloController">  <!-- 添加这行 -->
   <!-- 其他内容不变 -->
</AnchorPane>

3、运行结果:

 

发现时间过得真快,一晃加入CSDN已有7年,而我还是小白一个,继续加油吧。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐