JavaFX Einfache FX Application, aber wie alte Features umgehen?

X

Xyz1

Gast
Hallo,
ich muss mir ein bisschen FX aneignen....
Also dachte ich als erste Gehversuche, erstelle ich mal eine einfach FX-Application mit einem TextField und einer ListView, in die sortiert alle Wörter eingetragen werden...
Code:
12330

Java:
package application;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;

public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			TextField f = new TextField();
			ListView<String> v = new ListView<String>();
			f.textProperty().addListener((observable, oldValue, newValue) -> {
				List<String> list = new ArrayList<String>(Arrays.asList(newValue.split("\\s+")));
				Collections.sort(list, Comparator.naturalOrder());
				v.setItems(FXCollections.observableArrayList(list));
				v.refresh();
			});

			VBox vb = new VBox();
			vb.getChildren().addAll(f, v);

			BorderPane root = new BorderPane();
			root.setCenter(vb);

			Scene scene = new Scene(root, 400, 400);
			// scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		launch(args);
	}
}


Aber besonders das split(), sort() und refresh() bereiten mir Bauchschmerzen. Das Arrays.asList() stammt ja noch aus Dinosaurierzeiten... Lässt sich das nicht irgendwie sehr geschickt einzeilig unter Beibehaltung der Semantik mit Streams und Lambdas umgehen? Welche Pitfalls habe ich noch übersehen?

Danke für Eure Verbesserungsvorschläge schonmal!
 
K

kneitzel

Gast
Wie sähe Dein Einzeiler aus? :)
Meinst Du sowas in der Art:
Code:
v.setItems(FXCollections.observableArrayList(Arrays.stream(newValue.split("\\s+")).sorted(Comparator.naturalOrder()).collect(Collectors.toList())));

Aber für wirklich lesbar halte ich das nicht mehr. Aber macht halt alles: Split vom String, dann als Stream sortieren um es dann zu wieder zu einer Liste zu machen ...
 

mrBrown

Super-Moderator
Mitarbeiter
Code:
ObservableList<String> strings = FXCollections.observableArrayList();
TextField f = new TextField();
ListView<String> v = new ListView<>(new SortedList<>(strings, Comparator.naturalOrder()));
f.textProperty().addListener((observable, oldValue, newValue) -> strings.setAll(newValue.split("\\s+")));
 
X

Xyz1

Gast
Ja genau so etwas meinte ich. Hier wäre mein Vorschlag:
Java:
SortedSet<String> sss = new TreeSet<String>();

TextField f = new TextField();
ListView<String> v = new ListView<String>();
f.textProperty().addListener((observable, oldValue, newValue) -> {
	sss.addAll(Arrays.stream(newValue.split("\\s+")).collect(Collectors.toList()));
	v.setItems(FXCollections.observableArrayList(sss));
});
 
X

Xyz1

Gast
Perfekt(!), @mrBrown hat "gewonnen":
Java:
package application;

import java.util.Comparator;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.SortedList;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;

public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			ObservableList<String> strings = FXCollections.observableArrayList();

			TextField f = new TextField();
			ListView<String> v = new ListView<>(new SortedList<>(strings, Comparator.naturalOrder()));
			f.textProperty().addListener((observable, oldValue, newValue) -> strings.setAll(newValue.split("\\s+")));

			VBox vb = new VBox();
			vb.getChildren().addAll(f, v);

			BorderPane root = new BorderPane();
			root.setCenter(vb);

			Scene scene = new Scene(root, 400, 400);
			// scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		launch(args);
	}
}


Nun braucht man das nicht mehr:
Java:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


Alleine wäre mir das nicht eingefallen...
 
X

Xyz1

Gast
Also ich finde, so ist noch ersichtlich, was eigentlich passiert (ein Trade-off):

Java:
ObservableList<String> stringList = FXCollections.observableArrayList();

TextField f = new TextField();
ListView<String> v = new ListView<>(new SortedList<>(stringList, Comparator.naturalOrder()));

f.textProperty().addListener((observable, oldValue, newValue) -> {
	final ArrayList<String> list = new ArrayList<>(Arrays.asList(newValue.split("\\s+")));
	stringList.setAll(list);
});


Und es ruckelt auch auch nicht oder so - und eine Scrollleiste ("Bildlaufleiste") wäre auch zu sehen...
 
X

Xyz1

Gast
Ich wurde in einer PN danach gefragt, wie man das proper macht.
yagni finde ich das nicht...

Oder anders
YAGNI-400x400.png
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 einfache GUI mit schwarzem Feld AWT, Swing, JavaFX & SWT 12
B AWT einfache Stoppuhr -Verbesserungsvorschläge AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Einfache Benutzeroberfläche wie realisieren? AWT, Swing, JavaFX & SWT 6
P Swing Einfache Eingabe in JTextfield wird nicht ausgegeben AWT, Swing, JavaFX & SWT 3
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2
V Swing Einfache Graphen-Lib? AWT, Swing, JavaFX & SWT 2
A Swing einfache fragen zu frame AWT, Swing, JavaFX & SWT 10
iLoveTheInternet Einfache Grafikausgabe AWT, Swing, JavaFX & SWT 2
E Swing Einfache Frage zu JMenu AWT, Swing, JavaFX & SWT 4
E Einfache Frage zu GridBagLayout AWT, Swing, JavaFX & SWT 30
E einfache Frage zu invokeLater() AWT, Swing, JavaFX & SWT 4
B Einfache jpg-Bilder anzeigen AWT, Swing, JavaFX & SWT 8
E Einfache Frage zu GridLayout AWT, Swing, JavaFX & SWT 35
H einfache Buttonanzeige AWT, Swing, JavaFX & SWT 2
M Einfache Möglichkeit einen Login Dialog zu bauen? AWT, Swing, JavaFX & SWT 1
M einfache Frage über SWT GUI-Programmierung AWT, Swing, JavaFX & SWT 3
S Einfache Thread-Frage AWT, Swing, JavaFX & SWT 3
G Einfache Text formatierung? Wie? AWT, Swing, JavaFX & SWT 4
O Suche einfache Möglichkeit zum Speichern AWT, Swing, JavaFX & SWT 21
G Einfache Frage Panel AWT, Swing, JavaFX & SWT 5
D Start JUNG application with an Empty plot or visualisation AWT, Swing, JavaFX & SWT 1
H javafx application does not exist AWT, Swing, JavaFX & SWT 16
T Maximieren des Application-Modal Popup-Dialoges+Parent AWT, Swing, JavaFX & SWT 1
N JavaFX Projekt nachträglich zu JavaFX Application machen? AWT, Swing, JavaFX & SWT 1
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
R javafx erste application AWT, Swing, JavaFX & SWT 12
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L JavaFX JavaFX Application mit Preloader sauber runterfahren AWT, Swing, JavaFX & SWT 10
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
C JavaFX Application -Icon wird falsch dargestellt AWT, Swing, JavaFX & SWT 7
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
S Applet Application 2 applet AWT, Swing, JavaFX & SWT 3
C html browser in Application nutzen AWT, Swing, JavaFX & SWT 10
F fertige JApplets in Desktop Application einbinden AWT, Swing, JavaFX & SWT 4
F ansprechende Java Desktop Application AWT, Swing, JavaFX & SWT 2
K run als Java Application nicht als Java Bean AWT, Swing, JavaFX & SWT 2
M SWT YouTubeVideo in Java Application anzeigen lassen AWT, Swing, JavaFX & SWT 6
M 3D-Grafik Java3D-Application als executable .jar exportieren (Eclipse) AWT, Swing, JavaFX & SWT 5
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
C Problem mit Swing Application Framework - Projekt beim AWT, Swing, JavaFX & SWT 2
J Integration eines www-Browsers in eine Swing-Application AWT, Swing, JavaFX & SWT 7
R Erfahrungen, Forum zu JSR 296 - Swing Application Framework AWT, Swing, JavaFX & SWT 5
M JLayeredPane : Applet - Application AWT, Swing, JavaFX & SWT 4
T Java Application auf X-Server ohne Windowmanager AWT, Swing, JavaFX & SWT 9
A musik-abspielen als application AWT, Swing, JavaFX & SWT 2
A DnD native application -> JAVA AWT, Swing, JavaFX & SWT 2
A Java Application mit Batch starten? AWT, Swing, JavaFX & SWT 9
L Bilder anzeigen in einer Application AWT, Swing, JavaFX & SWT 4
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
J Injection - Aber Controller sind null AWT, Swing, JavaFX & SWT 3
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
K Swing Textfeld verstecken aber benutzen AWT, Swing, JavaFX & SWT 15
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
P jtabel Zeilen auswählbar, aber nicht editierbar AWT, Swing, JavaFX & SWT 3
D Passwort [Aber mit 3 Versuchen] Funktioniert nicht wie erwartet AWT, Swing, JavaFX & SWT 4
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX AnchorPane resizen, aber wie? AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
TheJavaKid JFrame defokusieren aber im Vordergrund behalten AWT, Swing, JavaFX & SWT 0
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
J JFrame maximierbar aber nicht resizable AWT, Swing, JavaFX & SWT 6
D JTable markier- aber nicht veränderbar AWT, Swing, JavaFX & SWT 10
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
O getValueAt liefert "", aber es wird was angezeigt AWT, Swing, JavaFX & SWT 12
S JTable Zellinhalt markierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 4
V Swing Wochenplaner in Swing erstellen! Aber wie? AWT, Swing, JavaFX & SWT 13
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben