JavaFX Interface Initializable - Was machen die Parameter in der Methode inizializeable() ?

da32079

Mitglied
Hallo liebe Java-Freaks 🙂

Ich hab mich mal ein wenig mit JavaFx beschäftigt. Scheint wohl ne recht coole Sache zu sein.
Zur Info, ich bein kein Java-Profi, hab aber schon das eine oder andere mal mit Java was gemacht.
Nun habe ich folgenden Code:

Java:
public class MainViewController implements Initializable  {
	
	@FXML
	private TextField txt_example;
	@FXML
	private Button btn_example;

	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		this.btn_example.setText("Klick mich");
	}
	
	@FXML
	private void btn_example_click() {
		this.txt_example.setText("Hallo Welt");
	}
	
}

Meine Frage: Was sind die beiden Parameter in der initiazlize()-Methode. Wofür sind die ? Da diese Methode automatisch beim Laden der GUI gestartet wird, rufe ich diese Methode nicht auf. Setze also auch keine Parameter.

Bitte um gute Erklärung 🙂
 
Zuletzt bearbeitet von einem Moderator:
Du tust das indirekt mit deinem FXMLLoader. Wie du schon bemerkt hast, benötigen die meisten diese beiden Parameter nicht, darum ist in JavaFX 8 dieses Interface "deprecated". Das heißt du sollst lieber eine Methode annotieren (damit der Loader die Methode auch findet, wenn sie private ist) mit:
Java:
@FXML
private void intitialize() {...}
Falls du dann die URL oder das ResourceBundle benötigst, dann kannst du diese auch injecten lassen mit (Achtung die Namen müssen stimmen):
Java:
@FXML private ResourceBundle resources;
@FXML private URL location;

Jetzt zu deinen weiteren Fragen:
ResourceBundle - Wird benötigt, falls man mehere Sprachen supported. Diese sind nichts anderes als key-value-pairs, die dir Begriffe/Sätze in den verschiedenen Sprachen liefern. Diese kannst du dann dem FXMLLoader übergeben.

Bsp.:
Java:
Button btn = new Button(resources.getString("button_name");
Die URL location gibt nur an wo du dich gerade befindest, das heißt wo die FXML Datei liegt bzw. geladen wurde. Das kannst du dann als Ausganspunkt für weitere Ladetätigkeiten verwenden.

Bei weiteren Fragen immer her damit.
 
Vielen Dank schonmal für den Beitrag, hat aber immer noch nicht Klick gemacht...
Du sprichst von "injecten" ?!
Ist mir leider in Java kein Begriff. Kenne nur SQL-Injection.
Dann hast du erwähnt, dass das ResourceBundle für den support von mehreren Sprachen benötigt wird. Bedeutet das etwa, dass die .fxml-Datei auch mit C++, C#, etc. benutzt werden kann ?

Vielen Dank schonmal 🙂
 
Ich spreche von Dependency Injection. Das heißt ich deklariere eine Variable und das "System" füllt mir diese automatisch (durch bestimmte Annotationen oder Naming-Conventions).

Sprachen nicht im Sinne von Programmiersprachen, sondern im Sinne von gesprochen Sprachen.

In Englisch sollte der Button "Close" und in Deutsch "Schließen" heißen.

Die Links die ich dir dazu gegeben habe, sollten eigentlich solche Fragen von selbst beantworten.
 

Neue Themen


Zurück
Oben