gpt4 book ai didi

JavaFx FX :id causes error

转载 作者:行者123 更新时间:2023-11-29 06:29:37 26 4
gpt4 key购买 nike

出于某种原因,我的 fx:id 没有正确绑定(bind)到我的 Controller 类,因此总是会导致错误。

Controller

package sample;

import javafx.fxml.FXML;

import java.awt.*;
import java.awt.event.ActionEvent;

public class Controller {

@FXML public Button button;

public void clickAction(ActionEvent actionEvent) {
System.out.println("Button clicked.");
}
}

FXML

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<BorderPane fx:controller="sample.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<Button text="Click me!" fx:id="button" onAction="#clickAction" BorderPane.alignment="CENTER"/>
</BorderPane>

我想我明白问题的根源,但我不知道如何正确解决它。根据this question的回答,我想我正在尝试在调用构造函数之前分配 FXML 元素(并且这些元素只能在初始化期间/之后分配)。

有没有办法实现Initializable?还是我犯了一个完全不同的错误?

最佳答案

你使用导入

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

在你的 fxml 文件中。

因此,加载 fxml 文件时创建的 Button 实例是一个 javafx.scene.control.Button

注入(inject)的字段类型需要是可以分配给 javafx.scene.control.Button 的类型。

因为除了 javafx.fxml.FXML 之外,您在 Controller 中的唯一导入来自 java.awt 包,所以 按钮显然不是这种情况 字段(类型 java.awt.Button)。

修复您的 Controller 以从 javafx 包中导入所需的类:

import javafx.fxml.FXML;

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

顺便说一句:如果您不使用 onAction 处理程序的参数,您也可以省略它:

public void clickAction() {
System.out.println("Button clicked.");
}

关于JavaFx FX :id causes error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com