2014-11-24 2 views
0

У меня есть класс, который простирается от TextField. Я ввел элемент управления вручную в файл fxml и включил оператор импорта. Теперь я не вижу элементы управления в Scene Builder версии 2.0. Вместо этого я получаю сообщение с сообщением: «Выбор содержит неразрешенные ссылки». Как я буду их решать и решать?Выбор содержит неразрешенные ссылки

Edit:

Я думаю, что не было ясно, о том, где моя проблема лежит. Мне кажется, что я должен уметь устанавливать класс, который указывает на класс моего настраиваемого элемента управления. Некоторые веб-сайты, такие как this, говорят мне, чтобы выбрать пункт меню, который называется Решить неизвестные типы. Поскольку эта запись в меню не существует в моей версии Scene Builder Я думал, что должен существовать какой-то новый механизм, который решает эти проблемы. Вот почему я был настолько расплывчатым в моем вопросе. Оглядываясь назад, это, возможно, не было хорошей идеей.

FocusedTextField.java:

package de.foo.bar.gui; 

import javafx.beans.property.StringProperty; 
import javafx.scene.control.TextField; 

public class FocusedTextField extends TextField{ 

    public void setStringProperty(StringProperty stringProperty){ 
     focusedProperty().addListener((observable, oldValue, newValue) -> 
             stringProperty.setValue(getText())); 
    } 
} 

Отрывок из FooDialog.fxml:

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

<?import de.foo.bar.gui.*?>  
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<AnchorPane> 
    <children>       
     <FocusedTextField fx:id="fooField" /> 
     <FocusedTextField fx:id="barField" /> 
    </children> 
</AnchorPane> 
+0

Какой строитель сцены вы используете? Вы импортировали Jar, содержащий новый элемент управления внутри Scene Builder? – ItachiUchiha

+0

Я использую Scene Builder 2.0, и я определил пользовательский элемент управления в проекте, в котором я хочу его использовать, поэтому для импорта нет внешнего баннера. – Nessuno

+0

Даже если он находится внутри проекта, Scene Builder является внешним инструментом, который должен знать о новом настраиваемом элементе управления, который вы определили. – ItachiUchiha

ответ

0

Вы пропускаете присвоение классов в FXML для сцены Builder, чтобы подобрать файл класса. Если вы используете Eclipse, то путь к классам укажет на ваш каталог bin.

FooDialog.fxml:

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

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

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"> 
    <children> 
    <FocusedTextField fx:id="fooField" /> 
    <FocusedTextField fx:id="barField" /> 
    </children> 
</AnchorPane> 

FocusedTextField.java

package custom; 

import javafx.beans.property.StringProperty; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.control.TextField; 

public class FocusedTextField extends TextField { 

    public void setStringProperty(final StringProperty stringProperty) { 
     focusedProperty().addListener(new ChangeListener<Boolean>() { 

      @Override 
      public void changed(ObservableValue<? extends Boolean> observable, 
        Boolean oldValue, Boolean newValue) { 
       stringProperty 
       .setValue(getText()); 
      } 
     }); 
    } 
} 

В вашем случае, вы можете использовать пакет, который вы хотите. Просто имейте в виду, что classpath является относительным путем, поэтому, если ваш fxml находится в src/de/foo/bar/gui/FooDialog.fxml. Тогда путь к классу будет

<?scenebuilder-classpath-element ../../../../../bin?> 
+0

Я использую IntelliJ, поэтому я шел с '', Но это не исправляет. Я также пытался добавить или удалить '../', но ничего не получилось. – Nessuno

1

У меня была такая же проблема, когда я скопировал секцию заголовка xml в другой файл макета fxml. , но когда я копировал вместе с операторами импорта, он очищается. теперь создатель сцены отображает файл макета после того, как он был отредактирован другим источником.

Смежные вопросы