Javafx: невозможно импортировать пользовательский элемент управления в Scene Builder - PullRequest
1 голос
/ 17 марта 2019

Я попытался импортировать свой графический элемент управления (файл jar) в конструктор сцены, но безуспешно. Файл был создан с помощью eclipse export -> jar. Когда он был выбран в конструкторе сцены «Импорт файла JAR / FXML», в диалоге импорта ничего не было.

Мой элемент управления - это TextField с TextFormatter:

import java.text.NumberFormat;
import java.text.ParseException;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.util.StringConverter;


public class CustomTextField extends TextField {

    public CustomTextField() {
        setText("Custom");

        NumberTextFormatter formatter = new NumberTextFormatter(new StringConverter<Number>() {

            @Override
            public String toString(Number object) {
                return object.toString();
            }

            @Override
            public Number fromString(String string) {
                try {
                    return NumberFormat.getInstance().parse(string);
                } catch (ParseException e) {
                    e.printStackTrace();
                    return null;
                }
            }

        });

        setTextFormatter(formatter);

    }

    public static class NumberTextFormatter extends TextFormatter<Number> {

        public NumberTextFormatter(StringConverter<Number> valueConverter) {
            super(valueConverter);
        }
    }
}

Я уверен, что виновником является использование TextFormatter. Поскольку элемент управления будет работать (появится в диалоге импорта), если я удалил TextFormatter из кодов.

Что не так?

Обновление: даже если я упростил мой конструктор, чтобы исключить setTextFormatter (), до тех пор, пока в нем все еще есть строка объявления TextFormatter, проблема все еще сохраняется. Такие как:

public CustomTextField() {
    setText("Custom");

    TextFormatter<Integer> formatter = new TextFormatter<Integer>(new IntegerStringConverter());
}

1 Ответ

0 голосов
/ 19 марта 2019

Нашел решение. Конструктор сцены Oracle 2.0 слишком стар / слишком туп, чтобы работать с TextFormatter. Необходимо обновить до Gluon сцены Builder 8.5.0.

...