当前位置: 首页 > 知识库问答 >
问题:

JavaFx在FXML中包含自定义组件

禹智渊
2023-03-14
package myExtendedObjects;

import javafx.scene.control.Label;

public class MyLabel extends Label interface connected{

    MyLabel(){
        super();
    }
  //Custom Code ...
}

转换为fxml

<?import myExtendedObjects.myLabel?>
<myLabel text="Name" />

我总是从javafx.fxml.loadException类型中得到错误代码:也许有比创建自定义类更好的解决方案。但我需要一个标签与自定义接口(连接)。也许另一个解决方案是创建一个只包含标签的fxml文件,并通过接口为此设置一个控制器类。

编辑:

try {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Viewer.fxml"));
        Parent root = fxmlLoader.load();
        Scene scene = new Scene(root);
        controller = fxmlLoader.getController();
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
<MyLabel fx:id="myLabel"/>
javafx.fxml.LoadException: 
/C:/Users/TheOLGPC/Desktop/java/SolarimpactTelemety2/bin/fxml/Viewer.fxml:48

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(FXMLLoader.java:1013)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at application.Main.start(Main.java:24)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalAccessException: Class sun.reflect.misc.ReflectUtil can not access a member of class myExtendedObjects.MyLabel with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.reflect.misc.ReflectUtil.newInstance(Unknown Source)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(FXMLLoader.java:1009)
... 15 more

共有1个答案

全卜霸
2023-03-14

Java有各种命名约定,包括类名应该大写,包名应该全部是小写,字段和方法名应该以小写开头。

虽然Java编译器和运行库仅将这些视为约定,并将从上下文中确定任何实体是否是类或属性(基本上不考虑名称),但在FXML和fxmlloader中情况并非如此。

FXML文档说明:

及以后

标记名以小写字母开头的元素表示对象属性。

因此,如果您的类没有遵循通常的命名约定,它们可能无法在FXML中正确工作。确保类和接口名称大写,属性名称不大写,包名称都是小写,并确保它们在Java代码和FXML中的使用一致。

package myExtendedObjects;

import javafx.scene.control.Label;

public class MyLabel extends Label interface connected{

    public MyLabel(){
        super();
    }
  //Custom Code ...
}
 类似资料:
  • 我的代码中有以下扩展的JavaFX对象: 它使用我编写的这个客户Java类来跟踪Tile位置: 现在,我想构建一个场景(通过JavaFX场景生成器),它使用一个网格窗格,每个单元格中都有一个平铺对象。我决定首先在scene Builder中构建一个场景,使用JavaFX矩形对象而不是平铺,然后手动编辑.fxml文件并将其中的矩形更改为平铺对象。问题是Intellij现在告诉我FXML文件中的平铺对

  • 我在相应的控制器中有一个用FXML创建的窗口,我有一个按钮,当单击特定的按钮时,它会加载一个小框。这个盒子也是使用FXML设计的。 当我加载盒子并想把它添加到窗口中时,我得到这个错误: 这是我的代码: 主窗口FXML: 我要动态创建的框的FXML:

  • SpecializedButton FXML视图只创建一个HBox,其中有两个锚窗格,左右两侧分别有一个标签和按钮。单击按钮时,它调用SpecializedButton控制器类中的doSomething()。 问题 通过这个设置,我使用FXML将视图与应用程序逻辑分开。 我会非常感谢你的真知灼见。提前道谢!

  • 我正在学习编写用于JavaFX8和Scene Builder的FXML自定义组件。 我编写了如下所示的FXML文件,但Scene Builder不会打开它,由于出现异常,给出消息“open operation has Failed”:

  • 通过将以下代码片段复制到构建中,我使用netbeans创建了javafx独立应用程序。xml文件 我有x64位版本的jdk环境,所以它创建了只在x64位版本的窗口或操作系统中运行的应用程序。有人能告诉我应该如何改变部署方法,使应用程序在x86位系统上运行。默认情况下netbean占用了64位版本的jdk环境

  • 我需要你的帮助来解决这个问题,我想从不同的包中包含子fxml。如果child.fxml在同一位置,我可以将它们包含到parent.fxml中,但不知道如何将child.fxml添加到parent.fxml中,当两者都在不同的位置/包中时。 先谢谢你。