【问题标题】:JavaFX custom control (TextField) not workingJavaFX 自定义控件(TextField)不起作用
【发布时间】:2013-05-21 15:10:26
【问题描述】:

我正在尝试使用 JavaFX 和 SceneBuilder 1.1 制作自定义控件。

我有这个代码:

FXML


<?import libreria.javaFX.componentes.componenteTextField.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <CustomComponent fx:id="pastaTxt" layoutX="69.0" layoutY="87.0" prefWidth="200.0" />
  </children>
</AnchorPane>

CustomComponent.java


package libreria.javaFX.componentes.componenteTextField;

import javafx.scene.control.TextField;

public class CustomComponent extends TextField {

public CustomComponent() {
    super();
    // TODO Auto-generated constructor stub
}

public CustomComponent(String arg0) {
    super(arg0);
    // TODO Auto-generated constructor stub
}

}


当我尝试从 SceneBuilder 打开它时,它告诉我:

缺少的类型是:[CustomComponent]

它让我有机会指定类路径(这也不能解决问题)。

我也尝试将类放在 import 语句中,如下所示:

<?import libreria.javaFX.componentes.componenteTextField.CustomComponent?>

但它给出了ClassNotFoundException

关于为什么会发生这种情况的任何想法?


更多信息

我用这些类完成了一个新项目:

代码如下:

CustomControl.fxml

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

<?import custom.CustomControl?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?scenebuilder-classpath-element ../../bin/custom?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <CustomControl layoutX="51.0" layoutY="100.0" prefWidth="200.0" />
  </children>
</AnchorPane>

CustomControl.java

package custom;

import javafx.scene.control.TextField;

public class CustomControl extends TextField {

    public CustomControl() {
        super();
    }

public CustomControl(String arg0) {
    super(arg0);

    }
}

我仍然有同样的问题。我用对话框指定了类路径,一切对我来说似乎都是正确的,但打开 SceneBuilder 时我遇到了同样的错误。


最新信息

试图接近解决方案,我们在 Eclipse 下尝试了这个项目。结果是 Eclipse 显示窗口正常,但 SceneBuilder 继续出现这些错误。我希望这条线索有所帮助。

如果有人在Scene Builder下做过这种自定义控件定义,请告诉我们并举个例子,对我们的项目非常有帮助。

【问题讨论】:

  • 使用场景构建器对话框添加路径绝对有效。当被问到时,您在哪里指定类路径?如果您使用的是 eclipse,它需要是 bin 目录。
  • 是的,我在编译项目后指定了 bin 目录。但它对我不起作用......我有它如下:
  • 阅读 java 类路径可能是个好主意。如果您有一个具有命名空间 libreria.MyComponent 的类,那么您需要添加 libreria 的父目录而不是完整路径。尝试 虽然我总是使用对话框。
  • 我实际使用过对话框。似乎一切正常,但 SceneBuilder 没有在层次面板上显示自定义组件,无论我指定它还是类路径,导入都不起作用。我已经尝试过您建议的方式,结果相同...
  • 我能想到的就是相对路径不正确。

标签: custom-controls javafx-2 javafx fxml scenebuilder


【解决方案1】:

这是由于没有指定正确的类路径导致的,这使得 java 运行时运行场景构建器可以加载控件类。

如果您正在运行 eclipse,并且您的类具有命名空间 custom.MyControl,则指定 bin 目录而不是自定义目录。在 maven 项目中,您需要指定 target/classes 目录。

在这里查看我自己项目中的示例:https://bitbucket.org/atill/estimate/src/22390a2ca034b55f1916e46435b714e5c489b90e/src/main/resources/projmon/gui/workTree.fxml?at=master

场景构建器通常会创建相对文件路径,因此移动文件会破坏类路径,您需要重新指定它。

【讨论】:

    【解决方案2】:

    也许已经晚了,但我想告诉你我做了什么。 我正在使用 J8、Eclipse IDE 和 Scenebuilder 2.0。

    1) 在 Eclipse IDE 上,从 Window->Show View > Navigator 打开 Navigator 视图 2) 在您的项目中,右键单击并在您想在 SB (Scene Builder) 上看到的类上选择“属性”。从资源部分验证生成的类的位置。例如,您应该看到如下所示的位置。 /TableViewDemo/bin/com/company/jfx8/example/fxmltableview/FormattedTableCellFactory.class

    3) 复制这个地址并添加fxml如

    <?scenebuilder-classpath-element ../../../../TableViewDemo/bin/com/company/jfx8/example/fxmltableview/FormattedTableCellFactory.class?> 
    

    4) 然后保存并享受你的工作:)

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      相关资源
      最近更新 更多