Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe

berserkerdq2

Bekanntes Mitglied
Ich habe z. B. ein Circle im scenebuilder eingefügt und dem eine Id gegeben.

Danach habe ich noch eine Controllerklasse erstellt und die beim Circle beigefügt.

Dann habe ich dem Circle eine Id gegeben und in der Controllerklasse habe ich dann ein private Circle mit dem ID-Namen erstellt.

Aber kann den Circle trotz importierter Circleklasse nicht nutzen?

Also kann den Circle erstellen, aber nicht nutzen?

Und ich muss den Circle wie die Id nennen oder?
 

berserkerdq2

Bekanntes Mitglied
Also nochmals eine Ergänzung, da ich nicht bearbeiten kann.

Ich habe ein Circle im Scenebuilder erstellt und diesem die Id: circle gegeben.

Dann bin ich in die Controllerklasse und habe:
Java:
@FXML
Circle circle;

public void test(){
    circle.setCenterX(230);
}

Das sollte nur ein Beispiel sein, wollte das halt verschieben, aber erhalte eine Fehlermeldung, der Controller ist beim Circle gesetzt, mit Scenebuilder, also die Klasse wurde gesetzt.

Was kann man da tun?
Also wenn ich den Code ausführe, kommt da eine Fehlermeldung, warum?

(Und muss ich überhaupt eine Methode nehmen, wo ich circle.setCenterX schreibe? Warum kann man nicht einfach ohne eine Methode dies machen?)

(Beziehungsweise hab jetzt einfach ein neues Circle genommen, ID gesetzt und das gleiche gemacht, jetzt geht die Klasse wieder ohne Fehlermeldung, aber das was ich gemacht habe, also setCenterX wird nicht auf dem Circle ausgeführt, es ist in der Stelle, wie auch im Scenebuilder gesetzt?)
 

berserkerdq2

Bekanntes Mitglied
Zeige Mitte immer den ganzen Code, also das ganze FXML und auch die ganze Controller Klasse. Wo rufst du z.B. die Methode auf?
Aso, muss ich die Methode noch extra aufrufen? Ich dachte, wenn ich eine Methode im Controller erstelle und den nicht speziell zuweise, dass die Methoden automatisch aufgerufen werden, wenn ich mein Programm starte.

Ich wollte einfahc, dass wenn ich die Klasse starte / run ausführe, dass das was ich im Controller gemacht habe, ausgeführt wird, muss ich das dann in eine initialize Methode machen, weil die immer aufgerufen wird?
 

KonradN

Super-Moderator
Mitarbeiter
Nein, Dir sollte klar sein, dass nie etwas einfach so aufgerufen wird. Es passiert nix von alleine!

Schon deine main Methode wird nur aufgerufen, weil Du beim Start von Java genau dies verlangst (direkt, weil Du diese Klasse als Hauptklasse angibst oder indirekt, weil es in dem Manifest so eingetragen ist).

Das war ja auch der Punkt mit der initialize Methode. Die wird nur aufgerufen, weil der FXMLLoader explizit nach dieser Methode schaut um diese dann ggf. aufzurufen. Wenn Du die "hugo" nennst, dann findet der FXMLLoader keine "initialize" Methode und ruft diese daher auch nicht auf.
 

berserkerdq2

Bekanntes Mitglied
Nein, Dir sollte klar sein, dass nie etwas einfach so aufgerufen wird. Es passiert nix von alleine!

Schon deine main Methode wird nur aufgerufen, weil Du beim Start von Java genau dies verlangst (direkt, weil Du diese Klasse als Hauptklasse angibst oder indirekt, weil es in dem Manifest so eingetragen ist).

Das war ja auch der Punkt mit der initialize Methode. Die wird nur aufgerufen, weil der FXMLLoader explizit nach dieser Methode schaut um diese dann ggf. aufzurufen. Wenn Du die "hugo" nennst, dann findet der FXMLLoader keine "initialize" Methode und ruft diese daher auch nicht auf.
Jetzt verstehe ich, also initialize ist eine Methode, die FXML auch aufruft, wenn die nicht definiert wurde in der Controllerklasse, wir überschreiben die also, wenn wir bei der Controllerklasse Sachen ausführen wollen, dei direkt beim Start der MEthode passieren sollen?
 

KonradN

Super-Moderator
Mitarbeiter
Jetzt verstehe ich, also initialize ist eine Methode, die FXML auch aufruft, wenn die nicht definiert wurde in der Controllerklasse, wir überschreiben die also, wenn wir bei der Controllerklasse Sachen ausführen wollen, dei direkt beim Start der MEthode passieren sollen?
Nicht FXML ruft etwas auf. Die Klasse, die sowas aufrufen könnte, wäre der FXMLLoader.

Und wenn die Methode nicht existiert, dann kann sie auch nicht aufgerufen werden. Der FXMLLoader schaut sich die Klasse vom Controller aber per Reflection an um unter anderem auch nach so einer Methode zu schauen.

Und wir überschreiben die Methode nicht. Ein Controller erbt meist von Object und daher gibt es da so eine Methode nicht. Es ist aber eine gute Praxis, Initializable zu implementieren und dann kann man @Override nutzen.

Und das ist die Methode, die weitergehende Initialisierungen durchführen kann, nachdem der FXMLLoader fertig ist mit seinen Initialisierungen.

Das Problem bei dem automatischen initialisieren ("injecten") von Werten ist: Im Konstruktor sind die noch nicht eingefügt. Es muss also erst die Instanz erzeugt werden (Konstruktor läuft) und dann kann ein FXMLLoader Controls in Variablen zuweisen und so. Und da dann ggf. noch Dinge erfolgen sollen gibt es dieses initialize das aufgerufen wird, wenn es existiert.
 

berserkerdq2

Bekanntes Mitglied
Nicht FXML ruft etwas auf. Die Klasse, die sowas aufrufen könnte, wäre der FXMLLoader.

Und wenn die Methode nicht existiert, dann kann sie auch nicht aufgerufen werden. Der FXMLLoader schaut sich die Klasse vom Controller aber per Reflection an um unter anderem auch nach so einer Methode zu schauen.

Und wir überschreiben die Methode nicht. Ein Controller erbt meist von Object und daher gibt es da so eine Methode nicht. Es ist aber eine gute Praxis, Initializable zu implementieren und dann kann man @Override nutzen.

Und das ist die Methode, die weitergehende Initialisierungen durchführen kann, nachdem der FXMLLoader fertig ist mit seinen Initialisierungen.

Das Problem bei dem automatischen initialisieren ("injecten") von Werten ist: Im Konstruktor sind die noch nicht eingefügt. Es muss also erst die Instanz erzeugt werden (Konstruktor läuft) und dann kann ein FXMLLoader Controls in Variablen zuweisen und so. Und da dann ggf. noch Dinge erfolgen sollen gibt es dieses initialize das aufgerufen wird, wenn es existiert.
Danke, aber ist @Override nicht immer fürs Überschreiben?

Und ist es allgemein immer so, dass bei jeder Klasse initalize aufgerufen wird? Und ich immer Initializable implementieren könnte und initialize dann auch immer ausgeführt wird oder ist es speziell hier so?

Und dürfte ich fragen, woher du eigentlich das alles weißt? Wenn du dein Wissen von einem Javabuch hast, könntest du das mir den Namen des Buches nennen?
 

KonradN

Super-Moderator
Mitarbeiter
Danke, aber ist @Override nicht immer fürs Überschreiben?
Ja, das setzt aber voraus, dass man da etwas überschreibt, also eine übergeordnete Klasse oder ein Interface, das man implementiert, diese Methode hat. Du hattest aber in einem Thread mal geschrieben, dass Du das Interface auch rausgeworfen hättest und dann würde die Annotation zu einem Fehler führen.

Und ist es allgemein immer so, dass bei jeder Klasse initalize aufgerufen wird? Und ich immer Initializable implementieren könnte und initialize dann auch immer ausgeführt wird oder ist es speziell hier so?
Nein, das ist hier so. Das ist - wie gesagt - eine Sache vom FXMLLoader.

Und dürfte ich fragen, woher du eigentlich das alles weißt? Wenn du dein Wissen von einem Javabuch hast, könntest du das mir den Namen des Buches nennen?
Das ist zusammen getragen über die Jahre und Jahrzehnte. Man stolpert halt mit der Zeit über sehr viel. Und vieles ergibt sich einfach auch direkt selbst, denn es ist so, dass sehr viele Dinge sich sehr stark ähneln. Wenn damals ein UI Framework gebaut wurde, dann sah das halt aus wie Swing / Windows Forms / MFC / ... Da konnte man nehmen was man will. Ich habe nie Delphi gemacht, aber ich bin sicher: Unter dem Strich wird es auch so gewesen sein.
Dann war die Idee endlich da mit deklarativen UIs und dann war es WPF, JavaFX, ... Auch hier sind die gleichen Ideen verwendet worden und umgesetzt worden.

Je mehr man sieht, desto mehr sieht man die Gemeinsamkeiten und dann fällt es einem sehr leicht, so Dinge zu verstehen und zu begreifen.

Ein Buch oder so gibt es da nicht einmal. Ich lese zwar viele Fachbücher, aber ich habe da zu JavaFX oder so nie ein Buch gesehen.
 

berserkerdq2

Bekanntes Mitglied
Ja, das setzt aber voraus, dass man da etwas überschreibt, also eine übergeordnete Klasse oder ein Interface, das man implementiert, diese Methode hat. Du hattest aber in einem Thread mal geschrieben, dass Du das Interface auch rausgeworfen hättest und dann würde die Annotation zu einem Fehler führen.


Nein, das ist hier so. Das ist - wie gesagt - eine Sache vom FXMLLoader.


Das ist zusammen getragen über die Jahre und Jahrzehnte. Man stolpert halt mit der Zeit über sehr viel. Und vieles ergibt sich einfach auch direkt selbst, denn es ist so, dass sehr viele Dinge sich sehr stark ähneln. Wenn damals ein UI Framework gebaut wurde, dann sah das halt aus wie Swing / Windows Forms / MFC / ... Da konnte man nehmen was man will. Ich habe nie Delphi gemacht, aber ich bin sicher: Unter dem Strich wird es auch so gewesen sein.
Dann war die Idee endlich da mit deklarativen UIs und dann war es WPF, JavaFX, ... Auch hier sind die gleichen Ideen verwendet worden und umgesetzt worden.

Je mehr man sieht, desto mehr sieht man die Gemeinsamkeiten und dann fällt es einem sehr leicht, so Dinge zu verstehen und zu begreifen.

Ein Buch oder so gibt es da nicht einmal. Ich lese zwar viele Fachbücher, aber ich habe da zu JavaFX oder so nie ein Buch gesehen.
Genau bis jetzt funktioniert es Fehlerfrei, auch ohne die Implementierung von Initializable. Du hast geschrieben, dass das guter Style ist, dass man das vorher implementiert und override macht, deshalb werde ich das auch verwenden, aber könnte es zu Fehlern führen, wenn man das nicht macht oder ist das rein stilistisch?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C SWT Wie greife ich auf den Inhalt einer bestimmten Zeile zu? (TableViewer) AWT, Swing, JavaFX & SWT 7
W Element aus comboBox mit observableList löschen AWT, Swing, JavaFX & SWT 3
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
G FX warten bis ein anderes GUI Element ausgewählt wurde AWT, Swing, JavaFX & SWT 8
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
M Internal Frames und Canvas-Element AWT, Swing, JavaFX & SWT 9
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
K JavaFX Element in HBOX nach rechts verschieben AWT, Swing, JavaFX & SWT 2
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
I FXML: StackPane als Root-Element AWT, Swing, JavaFX & SWT 5
ImperatorMing JavaFX Übersicht - Welches Element kann welches Erreignis AWT, Swing, JavaFX & SWT 3
D Swing "blaues" Element aus JComboBox erhalten AWT, Swing, JavaFX & SWT 6
F JavaFX Custom ListView erstellt ghost Element AWT, Swing, JavaFX & SWT 3
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
domjos1994 JavaFX Element auswählen auf dem der Cursor ist AWT, Swing, JavaFX & SWT 1
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
P Swing Nach removeAll() noch 1 Element vorhanden AWT, Swing, JavaFX & SWT 0
K Swing GUI Element wird nicht skaliert AWT, Swing, JavaFX & SWT 6
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
Z Swing Von vielen Klassen auf ein GUI-Element zugreifen AWT, Swing, JavaFX & SWT 10
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
H Swing Element aus JComboBox auswählen AWT, Swing, JavaFX & SWT 2
C click auf JButton und darunter liegendes element AWT, Swing, JavaFX & SWT 5
B Element schrittweise verschieben AWT, Swing, JavaFX & SWT 2
S Ausschluss bei Klick auf GUI Element AWT, Swing, JavaFX & SWT 6
GianaSisters AWT Per Button neues Element auf den jPanel setzen AWT, Swing, JavaFX & SWT 6
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
F Element anzeigen / erstellen. Maus vs Controller AWT, Swing, JavaFX & SWT 7
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
J jList, recht Maustast => Tooltip zu Element AWT, Swing, JavaFX & SWT 8
W SWT Resize Tree-Element AWT, Swing, JavaFX & SWT 3
Landei Swing JTree - Element mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 4
B Swing: letztes Element wird immer auf Fenstergröße gezogen AWT, Swing, JavaFX & SWT 3
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
G JTree Element wird nicht markiert AWT, Swing, JavaFX & SWT 2
X Swing Swing Element gesucht -> um als Konsole zu fungieren AWT, Swing, JavaFX & SWT 4
H GridBagLayout Element komplett ausfüllen AWT, Swing, JavaFX & SWT 5
D Swing Document-Structure; Element AWT, Swing, JavaFX & SWT 4
N Nur ein Element sichtbar beim Drucken eines JFrame AWT, Swing, JavaFX & SWT 9
C Aktion durchführen bei Klick auf ein Element im JTree (Untersch. Klick und Doppklick) AWT, Swing, JavaFX & SWT 5
S Listener der mich informiert wann immer einer Liste ein Element hinzugefuegt wird? AWT, Swing, JavaFX & SWT 4
H Swing [gelöst]Neues Swing Element erstellen AWT, Swing, JavaFX & SWT 4
D Problem an Parent Element ranzukommen. AWT, Swing, JavaFX & SWT 7
G JList und ein neues Element oben in der Liste einfügen AWT, Swing, JavaFX & SWT 4
U Ein Element in einer JList farbig hervorheben ! AWT, Swing, JavaFX & SWT 2
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
N JPopupMenu - ausgewähltes Element zurückgeben AWT, Swing, JavaFX & SWT 2
V Element zu Listenfeld hinzufügen AWT, Swing, JavaFX & SWT 6
S MouseListener zurückverfolgung auf element. AWT, Swing, JavaFX & SWT 7
A Element aus einer JList löschen AWT, Swing, JavaFX & SWT 5
zilti Swing-Element verändern AWT, Swing, JavaFX & SWT 13
N in jScrollPane, neues Swing Element hinzufügen AWT, Swing, JavaFX & SWT 6
M Zwei Element auf ein Contentpane AWT, Swing, JavaFX & SWT 45
G Listener (anonyme Klasse) jedem Element eines Array zuweisen AWT, Swing, JavaFX & SWT 5
V Wie heisst dieses GUI-Element? Gibt es sowas für Swing? AWT, Swing, JavaFX & SWT 10
E JTree selektiertes Element AWT, Swing, JavaFX & SWT 3
S Swing Element für Explorer-Fenster darstellung AWT, Swing, JavaFX & SWT 13
G JCombobox - Element richtig anzeigen AWT, Swing, JavaFX & SWT 5
W Element im JTree farblich markieren AWT, Swing, JavaFX & SWT 6
N JTree mehrere/ohne Root Element/e AWT, Swing, JavaFX & SWT 2
M JLIST - Ein Element selektieren und weiterverarbeiten! AWT, Swing, JavaFX & SWT 2
C leeres Element in Gridlayout einfuegen AWT, Swing, JavaFX & SWT 3
E Wie heißt dieses graphische Element (Bild inside)? AWT, Swing, JavaFX & SWT 2
G JTree. Neues Element hinzufügen und Selection beibehalten! AWT, Swing, JavaFX & SWT 3
D Element aus einer Methode heraus hinzufügen AWT, Swing, JavaFX & SWT 2
bummerland auf übergeordnetes element zugreifen AWT, Swing, JavaFX & SWT 2
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M Java FX Welches Accordion Tilded Pane geöffnet? AWT, Swing, JavaFX & SWT 4
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
M Welches Pattern bei GUI Anwendungen? AWT, Swing, JavaFX & SWT 2
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
F Welches GUI Plugin bzw. IDE für schnelle und gute Lösungen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
C [GUI] Welches GUI? AWT, Swing, JavaFX & SWT 28
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
F Timer welches JPanel aktualisiert AWT, Swing, JavaFX & SWT 6
C GUI Entwicklung - welches Pattern? AWT, Swing, JavaFX & SWT 16
E Layout, aber welches? AWT, Swing, JavaFX & SWT 8
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8
L Welches Layout? AWT, Swing, JavaFX & SWT 6
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
GilbertGrape Wie Panel anordnen? Welches Layout? AWT, Swing, JavaFX & SWT 7
J welches Layout? AWT, Swing, JavaFX & SWT 8
A welches programm? AWT, Swing, JavaFX & SWT 17
D Welches Layout für prozentuale Aufteilung: 20% - 60 % - 20% AWT, Swing, JavaFX & SWT 3
G welches Layout sollte ich benutzen? AWT, Swing, JavaFX & SWT 2
D Wie viele Pixel welches Icon? AWT, Swing, JavaFX & SWT 4
D Welches Layout? AWT, Swing, JavaFX & SWT 2
K welches package muss ich angeben um GUIs zu erstellen? AWT, Swing, JavaFX & SWT 5
D JPanel, welches sich per Button vergrößert(in GridBagLayout) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben