Если вы собираетесь предложить CSS, тогда не беспокойтесь, я знаю, что он отлично работает и очень прост в использовании, это просто из любопытства и из-за того, что я ненавижу работать с CSS во время кодирования в Java.
JavaFX TextField косвенно расширяет Parent, который имеет «немодифицируемый» ObservableList потомков типа Node, и один из них должен иметь тип Text, поэтому я расширил класс TextField и написал два метода для проверки, этот метод для получения все дети вышли из TextField.
public ArrayList<Node> getAllChildren(Parent parent) {
ArrayList<Node> res = new ArrayList<Node>();
for (Node n : parent.getChildrenUnmodifiable()) {
if (n instanceof Parent) {
res.addAll(getAllChildren((Parent) n));
} else {
res.add(n);
}
}
return res;
}
Это распечатка результата.
public void printChildren() {
ArrayList<Node> nodes = getAllChildren(this);
System.out.println("size = "+nodes.size()+" {");
for (Node n : nodes) {
System.out.println(" "+n.getClass().getSimpleName());
}
System.out.println('}');
}
Результат вполне ожидаемый.
size = 3 {
Path
Text
Path
}
Итак, я написал этот метод для получения только объекта Text.
private Text findText(Parent parent) {
for (Node n : parent.getChildrenUnmodifiable()) {
if (n instanceof Text) {
return (Text) n;
} else if (n instanceof Parent) {
Text p = findText((Parent) n);
if (p != null) {
return p;
}
}
}
return null;
}
Он работал нормально и возвращал объект Text.
Так что мне нужно было только установить Fill, и все будет готово.
public void setTextFill(Paint p) {
findText(this).setFill(p);
}
Но всякий раз, когда я пытаюсь установить textFill, я получаю RuntimeException, которое говорит:
Text.fill : A bound value cannot be set
Это немного долго, чтобы идти в ногу с настройкой только цвета для текста.
Любая помощь приветствуется.