Пользовательский элемент управления JavaFX (TextField) не работает
Я пытаюсь сделать пользовательский элемент управления с 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
.
любые идеи о том, почему это происходит?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Я сделал новый проект только с этими классами:
и код как следует:
пользовательский элемент управления.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>
пользовательский элемент управления.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 показывает окно ok, но SceneBuilder продолжает с этими ошибками. Надеюсь, эта подсказка поможет.
если кто-то сделал такое определение пользовательского контроля под Scene Builder, пожалуйста, сообщите нам и дайте нам пример, это будет очень полезно для нашего проекта.
2 ответов
это вызвано тем, что не указан правильный путь к классам, который позволяет Java runtime running scene builder загружать классы управления.
Если вы используете eclipse и ваш класс имеет пространство имен custom.MyControl
затем укажите каталог bin, а не пользовательский каталог. В проекте maven вам нужно указать каталог target/classes.
см. пример в моем собственном проекте здесь: https://bitbucket.org/atill/estimate/src/22390a2ca034b55f1916e46435b714e5c489b90e/src/main/resources/projmon/gui/workTree.fxml?at=master
относительный путь к файлу часто создается scene builder, поэтому перемещение файлов нарушит путь к классу, и вам нужно будет respecify его.
может быть, уже поздно, но я хотел бы рассказать, что я сделал. Я использую J8, Eclipse IDE и Scenebuilder 2.0.
1) в Eclipse IDE откройте вид навигатора из окна - >показать вид > навигатор 2) в вашем проекте щелкните правой кнопкой мыши и выберите "Свойства" в классе, который вы хотите увидеть в SB (Scene Builder). Проверьте расположение созданного класса в разделе Resource. Например, ты должна увидеть расположение как в следующем. /TableViewDemo/bin/com/company/jfx8/example/fxmltableview / FormattedTableCellFactory.класс!--2-->
3) скопируйте этот адрес и добавьте fxml, например
<?scenebuilder-classpath-element ../../../../TableViewDemo/bin/com/company/jfx8/example/fxmltableview/FormattedTableCellFactory.class?>
4) затем сохраните его и наслаждайтесь своей работой:)