Javafx:无法将自定义控件导入 Scene Builder
Javafx: Can't import custom control into Scene Builder
我试图将我的 gui 控件(jar 文件)导入到场景生成器中,但没有成功。该文件是使用 eclipse export -> jar 创建的。在场景生成器中选择它时 "import JAR/FXML File",导入对话框中没有任何内容。
我的控件是带有 TextFormatter 的 TextField:
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());
}
找到解决方案。 oracle scene builder 2.0 太旧/太笨,无法与 TextFormatter 一起使用。需要升级到 Gluon scene builder 8.5.0。
我试图将我的 gui 控件(jar 文件)导入到场景生成器中,但没有成功。该文件是使用 eclipse export -> jar 创建的。在场景生成器中选择它时 "import JAR/FXML File",导入对话框中没有任何内容。
我的控件是带有 TextFormatter 的 TextField:
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());
}
找到解决方案。 oracle scene builder 2.0 太旧/太笨,无法与 TextFormatter 一起使用。需要升级到 Gluon scene builder 8.5.0。