JavaFX加载fxml文件几种方法

106 篇文章 5 订阅

环境:idea,maven创建JavaFX工程

工程目录如下:

MusicPlayer.java

package cn.com;


import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.paint.Color;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import static cn.com.value.Values.TITLE;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-10-01
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public class MusicPlayer extends Application{
    
    public MusicPlayer() {}
    
    @Override
    public void start(Stage primaryStage) throws IOException {
//        Stage primaryStage = new Stage();
        /**
         * 三种方式加载fxml文件。两种方法都是从工程根目录的资源文件夹(resources)下加载。
         */
//        FXMLLoader fxmlLoader = new FXMLLoader(MusicPlayer.class.getResource("/fxml/index.fxml"));
        
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/index.fxml"));
        
//        FXMLLoader fxmlLoader = new FXMLLoader();
//        fxmlLoader.setLocation(getClass().getResource("/fxml/index.fxml"));
        
        AnchorPane rootPane = fxmlLoader.load();
        rootPane.setBackground(
            new Background(
                new BackgroundFill(
                    Color.RED,
                    new CornerRadii(1),
                    new Insets(10)
                )
            )
        );
        Scene scene = new Scene(rootPane);
        
        // 根据屏幕设置窗体尺寸。
        Rectangle2D rectangle2D = Screen.getPrimary().getBounds();
        double width = rectangle2D.getWidth();
        double height = rectangle2D.getHeight();
        primaryStage.setWidth(width * 3 / 5);
        primaryStage.setHeight(height * 3 / 5);
        
        // 窗体只有关闭按钮,没有最小化,最大化按钮。
//        primaryStage.initStyle(StageStyle.UTILITY);
        primaryStage.initStyle(StageStyle.UNDECORATED);
        primaryStage.setTitle(TITLE);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

运行结果:

JavaFXFXML文件中配置TableView以显示复选框,需要使用`TableView`的列(Column)中的`CheckBoxTableCell`。这里是一个基本的配置示例: 首先,在FXML文件中定义TableView及其列: ```xml <TableView fx:controller="your.package.YourController"> <!-- 其他列配置 --> <columns> <!-- 其他列配置 --> <TableColumn fx:id="checkColumn" text="Select" /> </columns> </TableView> ``` 接着,在对应的控制器类(这里是`YourController`)中,初始化`TableView`并设置复选框列的单元格工厂: ```java package your.package; import javafx.fxml.FXML; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.CheckBoxTableCell; public class YourController { @FXML private TableView<?> tableView; @FXML private TableColumn<?, ?> checkColumn; @FXML public void initialize() { // 设置复选框列的单元格工厂 checkColumn.setCellFactory(CheckBoxTableCell.forTableColumn(checkColumn)); // 设置每行可以编辑,以支持复选框的选中/取消选中操作 checkColumn.setEditable(true); // 假设你的数据模型是一个列表 // tableView.setItems(yourDataList); } } ``` 在上述代码中,`forTableColumn`方法用于设置列的单元格工厂,它会为每行提供一个复选框。`setEditable(true)`方法使得每一行成为可编辑的,从而可以改变复选框的状态。 注意,示例中假设你有一个名为`yourDataList`的数据模型列表,你将该列表绑定到`TableView`的`items`属性上,以便在界面上显示数据。你需要根据实际的数据结构和业务需求来编写相应的逻辑代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值