JavaFX Allgemeine Fragen zu JavaFX (uA zu Properties)

top_chief

Mitglied
Hallo,
da ich mich gerade versuche in JavaFX einzuarbeiten und mir wahrscheinlich das Grundkonzept noch etwas Kopfzerbrechen bereitet, hoffe ich, dass ihr mir etwas helfen könnt.

Generell interessiert mich die "automatische" Aktualisierung der Ui, sprich die Verwendung von Properties. Jetzt frage ich mich ob es weitere Vorteile gibt, außer dass der Code am Ende wahrscheinlich übersichtlicher und insgesamt schneller geschrieben ist? Gleichzeitig frage ich mich fast noch mehr, ob besagter Programmierstil(?) auch Nachteile hat?
Aktuell kommt mir praktisch jedes Tutorial, das ich lese, etwas "groß" vor. Mit groß meine ich nicht die Menge an Code, sondern eher, die Betrachtung der Zustände. Normalerweise "laufe" ich den Code ab um ihn zu verstehen, bei JavaFX kommts mir häufig so vor als wenn man der Code wie ein Puzzle zerstreut vor sich hat und nicht so recht weiß wo was wann stattfindet. Bin ich doof oder ist das normal?

Wem das zu "Wischi-Waschi" war...
Einfaches Beispiel: man hat mehrere Listen nebeneinander, in der ersten Liste wählt man eine Kategorie aus und aufgrund der Auswahl wird in einer nächsten Liste eine Vorauswahl getroffen und wenn man wieder in der ersten Liste etwas auswählt wird die zweite Liste zurückgesetzt oder unsichtbar gemacht.
Ist ja kein allzu außergewöhnliches Szenario. Irgendwie fehlt mir dafür komplett der Überblick. Ohne Properties wäre mein Ansatz einfach so, dass man eine Referenz auf ein Objekt weiterreicht und dann so die Ui aktualisiert wird. Aber genau das versucht man ja offensichtlich in JavaFX zu vermeiden, richtig?
Ich hoffe ich konnte halbwegs erklären was mein Problem ist.

Danke vorab
 

Dompteur

Top Contributor
Aktuell kommt mir praktisch jedes Tutorial, das ich lese, etwas "groß" vor. Mit groß meine ich nicht die Menge an Code, sondern eher, die Betrachtung der Zustände. Normalerweise "laufe" ich den Code ab um ihn zu verstehen, bei JavaFX kommts mir häufig so vor als wenn man der Code wie ein Puzzle zerstreut vor sich hat und nicht so recht weiß wo was wann stattfindet. Bin ich doof oder ist das normal?
Dein Eindruck ist vollkommen richtig und das ist normal - du bist also nicht zwangsläufig doof ;-).
Jeder, der den Einstieg geschafft hat, musste da durch.

Mit dem Aufkommen grafischer User Interfaces kam auch ein neues Programmiermodell auf. Dabei erfolgt die Steuerung des Programms durch eine zentrale Komponente und der Programmierer fügt an bestimmten Punkten das gewünschte Verhalten hinzu.
Die UI-Komponenten bilden Klassenhierarchien. Allgemeine Eigenschaften werden in Basisklassen, spezielle in abgeleiteten Klassen implementiert - also eigentlich nur das typische OO-Konzept.

Ob dir das nun bei deinem konkreten JavaFX Versuchen hilft, weiß ich nicht. Aber vielleicht konnte ich dir zumindest Mut zusprechen. ;-)
 

dzim

Top Contributor
Ich verstehe im Moment noch nicht dein Beispiel. Was willst du uns damit nun eigentlich genau fragen?
So oder so musst du in deinem Code einen Handler für einen Klick in Liste 1 schreiben, dieser setzt dann die Items in Liste 2 (und setzt entsprechend, wie man es möchte, noch die Properties für visible und/oder managed).

Benötigst du Properties im allg.? Ja. Aber das gibt das Modell, bzw. die API von JavaFX so vor. In anderen APIs setzt du explizit nur den Handler über eine Methode, hier kannst du ihn meist entweder über die zu überwachden Property (z.B. die Selection) oder via "Convenient"-Methode setzen. Keine Hexerei.
Im Fall deines Beispiels könnte dein Modell schon eine Art Tree sein, so dass du die Elemente für Liste 2 schon über das ausgewehälte Objekt in Liste 1 zur Verfügung hast - aber das hängt auch vom Speicherverbrauch ab - riesige Listen würde ich eher on-demand laden...

Aber wie gesagt: Mir ist dein grundsätzliches Problem, bzw. deine Frage noch etwas rätselhaft, worauf du eigentlich hinaus möchtest...

Grüsse


PS:
Hast du schon mal mit SWT/Eclipse entwickelt? Sei froh, dass es bei JavaFX gute Dokus und Tutorials gibt. Der Einstieg speziell in die RCP-Entwicklung auf Eclipse-Basis hatte eine wahrhaft episch steile Lernkurve...
 

top_chief

Mitglied
Danke euch beiden. Ja das macht Mut. :)
Was Swing angeht hatte ich nur 1x ein kleines 1-Fenster Programm geschrieben, was Strings formatiert (also eigentlich "nix").
Habe bisher vor allem Erfahrungen in Android und auf dem Desktop in Qt gemacht, also so gesehen ist die GUI-Programmierung, als solche, nicht neu für mich und mir kommt das mit der steilen Lernkurve auch bekannt vor. :)

Ich werde mal ein kleines Testprogramm schreiben, vielleicht klären sich dann meine Fragen von alleine, bzw. wäre es dann wahrscheinlich auch einfacher meine "Unklarheiten" zu erklären.
So gesehen, weiß ich gerade selbst nicht so 100%tig "was" eigentlich mein Problem ist. :D
 

dzim

Top Contributor
Wenn du den Android-Hintergrund nutzt, könntest du mit den FXMLs ja quasi auf eine alte Bekannte stossen: JavaFX nutzt, wenn man es denn möchte, eine deklarative UI. Was Android seine Layout-XMLs sind, sind hier die FXMLs. Unterschied ist nur, dass dort der Controller (Activity/Fragment) das Layout lädt, während es in JavaFX i.d.R. per Konvention genau umgekehrt ist. Das lässt sich mit Frameworks wie DataFX zwar wieder umkehren (dort wird die UI-Controller-Klasse mit der String-Referenz auf das FXML-File annotiert), dort bleibt aber das "Problem", dass man in einem Controller nicht notwendigerweise den Parent kennt.

Wenn du etwas im Forum nach JavaFX suchst, wirst du da einige Diskussionen / Fragen zu finden, bei dem einige Möglichkeiten aufgezeigt wurden (u.a. wie Android es bei Fragmenten empfielt: Mach ein Interface, dein Fragment implementiert das und die Activity kann dort dann etwas mit anstellen... stark vereinfacht ausgedrückt...).
 

top_chief

Mitglied
Ahhhha!!!! :D
Die obige Frage hat sich mehr oder weniger geklärt :p
Hatte schon eine Art Testprogramm, allerdings ist da der Code derzeit recht schwierig hier im Forum abzubilden, da recht umfangreich.

Letztlich hab ich ein paar unlogische Abläufe in der Navigation bzw. in der Anzeige der Inhalte in den Listen entdeckt. Sprich man klickt sich von einer Liste auf eine andere und wenn man wieder zurück auf die erste klickt, bleibt dann in der zweiten Liste ein grau hinterlegtes (unselektiertes) Element zurück. Weiß nicht genau ob das nun ein Bug ist, oder gewollt.. Auf jeden Fall hat das meine Anwendung extrem blockiert, da die Erkennung für changed() somit ausbleibt - also nicht stattfindet.
Hab aber glaube ich eine passable Lösung gefunden, somit funktioniert nun doch schon einiges besser, als ich noch vor ein paar Stunden dachte und langsam wird ein Schuh draus.. :)
Ich glaube es braucht einfach ein bisschen Zeit bis man in die Eigenarten von JavaFx durchsteigt.

Die Lösung habe ich hier gefunden.

Code:
  scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
            @Override
            public void changed(ObservableValue<? extends Node> ov, Node t, Node t1) {

                if (t1 == mCardListView) {
                    mLableListView.getSelectionModel().clearSelection();
                }
                if (t1 == mLableListView) {
                    mCardListView.getSelectionModel().clearSelection();
                }
            }
        });

So gesehen konnte man mir hier eigentlich nicht großartig helfen, da ich ja auch nicht genau beschrieben habe, was das Problem war^^

Nachtrag zu:
Wenn du etwas im Forum nach JavaFX suchst, wirst du da einige Diskussionen / Fragen zu finden, bei dem einige Möglichkeiten aufgezeigt wurden (u.a. wie Android es bei Fragmenten empfielt: Mach ein Interface, dein Fragment implementiert das und die Activity kann dort dann etwas mit anstellen... stark vereinfacht ausgedrückt...).

Aktuell mache ich es ein bisschen anders... Ich übergebe dem Controller eine Referenz von der "normalen Klasse", sobald start ausgeführt wird.
Main:
Code:
 @Override
    public void start(Stage primaryStage) throws Exception {
        mStage = primaryStage;
        MainController controller = new MainController();
        controller.setMain(this);
...
(kleine Frage am Rand: Den Konstruktor vom Controller sollte man nicht verändern, oder? )

Wenn dann im Controller der Trigger erfolgt, ruft die Referenz die Funktion in der "Basis" aufgerufen.

Controller:
Code:
 public void menuBtnNewLableClicked(ActionEvent actionEvent) { mMain.createNewLable(); }

Deinen Vorschlag das mit einem Interface zu lösen hört sich aber auch gut an, Danke für den Tipp. Gibt es nennenswerte Vor- bzw Nachteile zwischen den beiden Implementierungen?
 
Zuletzt bearbeitet:

dennisbauer

Aktives Mitglied
Also ich kann sagen, dass die Umstellung von Swing auf JavaFX auch sehr schwierig war für mich, wenn man es gewohnt war, in diesem drückenden programmierseitigen Layouting rumzuwerkeln.

Es ist unter Umständen schwierig, mit JavaFX komplett zurecht zu kommen, wir hatten auch im Büro Probleme mit einigen Konzepten wie Tableviews, Listviews usw.. Wenn man sich hier aber ein wenig einliest, dann kommt man ganz schnell in diesen Stil aber rein.

JavaFX zwingt auch schon regelrecht, dass man sich dem MVC-Konzept zuwendet, bietet einen eigenen GUI-Editor mit dem Scenebuilder, was dazu führt, dass man ein Programm, in unserem Fall, 5x schneller entwickelt hat, als mit Swing.
Klar, durch die Auftrennung werden die Klassen auch etwas größer, dafür bleiben sie aber stets übersichtlich.

In Swing musste man ja 20 Zeilen schreiben, bis man immerhin mal einen Button hat, der nix tut. Dann dazu noch die 10 Stunden bis auch der Button mal einigermaßen gut aussieht, naja. Da hat man es mit CSS in JavaFX wesentlich leichter, designtechnische Lösungen zu realisieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 6
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 4
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
Lukas2904 LookAndFeel Wie ändere ich das allgemeine Disigne des Fensters? AWT, Swing, JavaFX & SWT 4
K Allgemeine Technik bei Bildverdunklung in Spielen AWT, Swing, JavaFX & SWT 6
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
E Swing Allgemeine Frage zur Struktierung und Umsetzung AWT, Swing, JavaFX & SWT 2
S Allgemeine Frage zur Unterbringung von allgemeinen Daten einer Applikation AWT, Swing, JavaFX & SWT 2
F Allgemeine Frage über Fenster in Anwendungen AWT, Swing, JavaFX & SWT 2
B Allgemeine Frage zu Look&Feel AWT, Swing, JavaFX & SWT 2
T Allgemeine Frage - innovatives GUI Design AWT, Swing, JavaFX & SWT 6
J Allgemeine Designfrage ! AWT, Swing, JavaFX & SWT 3
M Allgemeine Frage zur Methodik & ein paar spezielle Probl AWT, Swing, JavaFX & SWT 4
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
D Fragen zur GUI AWT, Swing, JavaFX & SWT 4
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
Q Fragen zur JMenuBar & Co. AWT, Swing, JavaFX & SWT 3
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
Kenan89 JMenu Fragen AWT, Swing, JavaFX & SWT 5
Luk10 (LWJGL) Fragen zu VBOs AWT, Swing, JavaFX & SWT 21
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
J Das erste Projekt und ein Haufen von Fragen. Der SudokuReader. AWT, Swing, JavaFX & SWT 4
Luk10 Fragen zum Laden von Fonts AWT, Swing, JavaFX & SWT 4
Luk10 Fragen zum Koordinaten System AWT, Swing, JavaFX & SWT 3
M JTable Grundlegende Fragen AWT, Swing, JavaFX & SWT 4
B Prozentrechner GUI Fragen AWT, Swing, JavaFX & SWT 4
H Fragen zu JPanel und JButton AWT, Swing, JavaFX & SWT 3
Q Swing Zeichenprogramm, grundlegende Fragen AWT, Swing, JavaFX & SWT 8
U Swing Fragen bezüglich Multithreaded GUIs (Grundlagen): AWT, Swing, JavaFX & SWT 3
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
A diverse Layout-Fragen AWT, Swing, JavaFX & SWT 4
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
H Swing Zwei Fragen AWT, Swing, JavaFX & SWT 5
S 2D-Grafik Diverse Fragen zu Imagemanipulation in Java AWT, Swing, JavaFX & SWT 11
C Swing Grundsätzliche Fragen zu MVC AWT, Swing, JavaFX & SWT 8
F 3 Fragen zu Applets AWT, Swing, JavaFX & SWT 4
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
S Fragen zu GridBagLayout AWT, Swing, JavaFX & SWT 6
B Zeichnen in Swing - Jede Menge Fragen! AWT, Swing, JavaFX & SWT 2
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
D GridBagLayout und JEditorPane (mehrere fragen) AWT, Swing, JavaFX & SWT 2
A Swing einfache fragen zu frame AWT, Swing, JavaFX & SWT 10
P Mehrere Fragen AWT, Swing, JavaFX & SWT 4
A Fragen zu Microber AWT, Swing, JavaFX & SWT 4
C Mehrer Fragen zu großem kompletten Swing Beispiel AWT, Swing, JavaFX & SWT 5
T Fragen zu JList und DnD AWT, Swing, JavaFX & SWT 13
I Einige Fragen zu JList AWT, Swing, JavaFX & SWT 6
I Drei Fragen/Probleme mit einer JTable AWT, Swing, JavaFX & SWT 9
G Fragen zum FileChooser AWT, Swing, JavaFX & SWT 5
M 2 Kleine Fragen zum JOptionFrame AWT, Swing, JavaFX & SWT 5
G performance fragen zu AWT, Swing AWT, Swing, JavaFX & SWT 14
J Fragen zu JTable und JScrollpane AWT, Swing, JavaFX & SWT 2
R Frage zu Listfeld oder jTable, auch andere Fragen AWT, Swing, JavaFX & SWT 5
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
ModellbahnerTT Fragen zu AWT AWT, Swing, JavaFX & SWT 3
S Fragen Databinding? AWT, Swing, JavaFX & SWT 3
J Fragen zu AWT Komponenten AWT, Swing, JavaFX & SWT 5
U 2 Fragen zu BufferedImages AWT, Swing, JavaFX & SWT 19
J Fragen zur Vererbung und Update AWT, Swing, JavaFX & SWT 12
J Fragen zum SyntaxHighlighting (DefaultStyledDocument) AWT, Swing, JavaFX & SWT 2
I Ein paar SWT Fragen AWT, Swing, JavaFX & SWT 10
P Zwei Fragen zu Bildern in Applets AWT, Swing, JavaFX & SWT 2
isowiz Einige Fragen zur ersten eigenen Sing-Applikation AWT, Swing, JavaFX & SWT 4
G 2 Fragen JDesktopPane AWT, Swing, JavaFX & SWT 4
S Fragen zu einem Beispiel(Swings und AWT) AWT, Swing, JavaFX & SWT 33
G Fragen zum Ocean Look and Feel AWT, Swing, JavaFX & SWT 3
G Neue Komponente erstellen - Fragen/Probleme mit MouseEvents AWT, Swing, JavaFX & SWT 2
Y 2 Fragen- JList Inhalt ändern und Fenster invisible setzen AWT, Swing, JavaFX & SWT 5
C Gemischte Fragen AWT, Swing, JavaFX & SWT 10
G Fragen zu JList AWT, Swing, JavaFX & SWT 12
K 2 fragen:JCheckBoxMenuItem und ComboBox AWT, Swing, JavaFX & SWT 2
T Mehrere Fragen zu JToolBar AWT, Swing, JavaFX & SWT 2
N 2 Fragen (zu binärem Suchen und Scrollbar) AWT, Swing, JavaFX & SWT 6
B Einige Fragen zum GUI AWT, Swing, JavaFX & SWT 3
Juelin StringGrid in SceneBuilder und javaFX AWT, Swing, JavaFX & SWT 2
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
MiMa JUnit5 im JavaFX Projekt AWT, Swing, JavaFX & SWT 2
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
MiMa SwingFXUtils in JavaFX 20 AWT, Swing, JavaFX & SWT 6
MiMa JavaFX Fenstertitel zu klein. AWT, Swing, JavaFX & SWT 1
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
Hatsi09 Javafx Neuladen von ImageView und MediaView AWT, Swing, JavaFX & SWT 3
Maxim6394 JavaFX Umlaute in JavaFX GUI AWT, Swing, JavaFX & SWT 12
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben