JavaFX Parameter für Custom Control in FXML übergeben?

MarkusM

Aktives Mitglied
Hallo,

ich bastle gerade etwas intensiver mit JAvaFX herum und stehe mal wieder vor einem Problem.

Ich habe mir ein NumericTextField gebaut, welches die Klasse TextField erweitert. Neben dem Standardkonstruktor habe ich auch einen Konstruktor erzeugt, dem ich gerne diverse Parameter übergeben möchte. Nun möchte ich diese Parameter im FXML File übergeben.

Konstruktor:
Java:
public DoubleTextField(Integer fractionalDigits, Double minValue, Double maxValue, Boolean percent){...}

FXML:
[XML]<DoubleTextField percent="true" fractionalDigits="2" minValue="0.0" maxValue="1000.00" fx:id="age" layoutX="159.0" layoutY="183.0" />[/XML]

Nur leider kommen diese Parameterwerte nicht beim NumerTextField an. Hat hier jemand eine grobe Idee?

Viele Grüße

Markus
 
Die rufen meines Wissens nach immer den Default-Konstruktor auf und anschließend jede Setter-Methode der Parameter einzeln. (Ohne Beleg / Garantie). Analog zu den anderen Komponenten würde das folgendermaßen aussehen:

Klasse:
Java:
public class ButtonD extends Button {
	private DoubleProperty d;
	
	public void setD(double d) {
		this.d.set(d);;
	}
}

FXML:
Code:
<ButtonD d="100.0"></ButtonD>
 
Hi,

funktioniert wie beschrieben, ich habe nur die Parameter an der falschen Stelle abgefragt, das waren die Null.

Vielen Dank und viele Grüße

Markus
 
Ich glaub, das steht auch irgendwo dokumentiert, dass die FXML-Attribute eben nicht für Kontruktoren sind (dazu könnte man auch teilweise viel zu viele angeben - solch lange Kontruktoren gibt es nirgens in FX), sondern für Properties - oder sogar für die Builder.
 
@dzim:
Beim Konstruktoraufruf werden die Attribute noch nicht berücksichtigt, was auch logisch ist, da sie erst nach der Erzeugung der Instanz per Injektion durch die entsprechenden Setter übergeben werden. Ich hatte da anfangs einen Gedankenfehler und mich gewundert warum da nichts "ankommt".

Man kann auch andere Controls übergeben, hier ist darauf zu achten, dass diese im FXML-File vor dem empfangenden Element stehen. Was an sich auch logisch ist, aber ich habe trotzdem etwas gebraucht um dahinter zu kommen.
 
Zuletzt bearbeitet:

Zurück
Oben