JavaFX Tabelle mit gespeicherten Eingabe Werten

friednoodles

Aktives Mitglied
Hallo, habe wieder ein kleines Problem.
Mein bisheriges Programm hat eine TextArea über die man mit der Eingabe auf einem TextField und Button Klick einen output bekommt. Kurz gesagt möchte ich ca. die letzten 10 TextField inputs mit den dazugehörigen TextArea outputs in einer Tabelle gespeichert haben die sich auf der Startseite meines Programms befindet.

Ich bin alleine so weit gekommen das mir eine Tabelle mit den Spalten "Eingabe" und "Ausgabe" angezeigt wird.

Java:
private TableView table = new TableView();
Java:
    private void tabellenInhalt() {
        TableColumn eingabe = new TableColumn("Eingabe");
        TableColumn ausgabe = new TableColumn("Ausgabe");
        table.getColumns().addAll(eingabe, ausgabe);
    }
Angezeigt wird mir das dann in einer HBox die sich in einer anderen Methode befindet.

Ich möchte wenn meine Logik fertig ist einfach meine tabellenInhalt() Methode in den ActionListener von meinem Button legen, damit aktuelle Werte in der Tabelle gespeichert werden auf Knopfdruck.

Viele Tutorials die ich auf Google gefunden habe erstellen eine neue Klasse über die sie alle Tabellen Werte beziehen. Brauche ich für mein Vorhaben wirklich eine neue Klasse?
Und die Tutorials die eine neue Klasse erstellt haben benutzen eine ArrayList für ihre Werte.
Muss ich das auch machen wenn ich meine Tabellen Inhalte von meiner TextArea&TextField beziehen möchte?

Wäre sehr dankbar für mögliche Hinweise! :)
 

Robat

Top Contributor
Ja es macht für dich schon Sinn, eine eigene Klasse zu schreiben, die jeweils die Eingabe/Ausgabe zu einem Objekt zusammenführt - nennen wir die Klasse mal Result. Zusammen mit den JavaFX-Properties lässt sich dann dein Vorhaben ganz einfach umsetzen.

JavaFX-Properties ermöglichen es bestimmte Eigenschaften eines Objektes an ein anderes Objekt (bspw. Nodes) zu koppeln. So enthält also jede Zeile deiner Tabelle ein Result-Objekt. Den Inhalt der ersten Spalte koppelst du dann an die input-Eigenschaft der Result Klasse und die zweite Spalte an die output-Eigenschaft.

Zunächst solltest du aber sowohl bei deiner TableView<S>, als auch bei den TableColumns<S,T> die generischen Typen angeben.
Bei das S steht jeweils für den Datentyp, den die Tabelle am Ende in der Liste übergeben bekommt. Das T steht für den Datentyp, den die Spalte am Ende darstellt.
Java:
TableView<Result> table = new TableView<>();
TableColumn<Result, String> inputColumn = new TableColumn<>("Eingabe"); // Tabelle enthält Result-Objekte und diese Spalte repräsentiert einen String
TableColumn<Result, String> outputColumn = new TableColumn<>("Ausgabe"); // Tabelle enthält Result-Objekte und diese Spalte repräsentiert einen String

Die Result Klasse könnte beispielhaft so aussehen:
Java:
class Result {
    private SimpleStringProperty input;
    private SimpleStringProperty output;

    public Result(String input, String output) {
        this.input = new SimpleStringProperty(input);
        this.output = new SimpleStringProperty(output);
    }

    public SimpleStringProperty inputProperty() {
        return input;
    }

    public SimpleStringProperty outputProperty() {
        return output;
    }
}

Jetzt muss die Verbindung zwischen den Properties und den Spalten (Columns) geschaffen werden. Das bekommst du über die Methode setCellValueFactory. Dieser kannst du mitgeben, welche Property aus dem Result-Objekt zu dieser Spalte gehört.
Java:
inputColumn.setCellValueFactory(e -> e.getValue().inputProperty()); // e.getValue() repräsentiert dabei immer ein Result-Objekt
outputColumn.setCellValueFactory(e -> e.getValue().outputProperty());
Um die Properties im vollsten auszunutzen, solltest du mit einer ObservableList, anstatt einer normalen ArrayList arbeiten um deine Daten zu sammeln. Diese ObservableList kann zB. automatisch Listener ansteuern, falls Änderungen in der Liste auftreten. So musst du die Tabelle nicht per Hand refreshen.
Java:
ObservableList<Result> data = FXCollections.observableArrayList();
table.setItems(data);
Wenn du nun der Liste data ein neues Result Objekt hinzufügst, updated sich deine GUI "ganz automatisch" ohne das du zusätzlichen Aufwand hast.
Hier noch mal der komplette GUI Code zusammen gepackt in einem handlichen Beispiel:
Java:
public class Main extends Application {
   
    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane root = new BorderPane();

        TableView<Result> table = new TableView<>();

        TableColumn<Result, String> inputColumn = new TableColumn<>("Eingabe");
        inputColumn.setCellValueFactory(e -> e.getValue().inputProperty());

        TableColumn<Result, String> outputColumn = new TableColumn<>("Ausgabe");
        outputColumn.setCellValueFactory(e -> e.getValue().outputProperty());

        table.getColumns().addAll(inputColumn, outputColumn);
        root.setCenter(table);
        ObservableList<Result> data = FXCollections.observableArrayList();
        table.setItems(data);

        HBox inputWrapper = new HBox();
        TextField tfInput = new TextField();
        inputWrapper.getChildren().addAll( new Label("Eingabe: "), tfInput);

        TextField tfOutput = new TextField();
        inputWrapper.getChildren().addAll(new Label("Ausgabe: "), tfOutput);

        Button btnOk = new Button("Hinzufügen");
        btnOk.setOnAction(e -> data.add(new Result(tfInput.getText(), tfOutput.getText())));
        inputWrapper.getChildren().add(btnOk);

        root.setTop(inputWrapper);

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.sizeToScene();
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}
 

friednoodles

Aktives Mitglied
Wow, das war wirklich sehr hilfreich. Hat auf Anhieb geklappt bei mir.
Habe jetzt auch verstanden warum eine extra Klasse mehr Sinn macht.
Vielen vielen dank für diese ausführliche Erklärung! :)

Kann man noch hinzufügen, dass die Listen Werte erhalten bleiben nach einem Programm Neustart?
Habe schon nach "Keep values" und "remember values" gesucht, scheinen aber nicht die richtigen Stichwörter zu sein.
Brauche nur ein Stichwort, will dann versuchen Das selber einzufügen.
 

Robat

Top Contributor
Naja du musst die Daten irgendwie persistieren. Am "einfachsten" ist es wohl, die Daten in eine Datei (zB CSV) zu schreiben.
 

friednoodles

Aktives Mitglied
Bin etwas weiter gekommen, hänge aber doch an einer Stelle jetzt:
Folgendes habe ich bisher
Java:
ObservableList<Result> data = FXCollections.observableArrayList();
Hier meine Methode für den Inhalt der Tabelle
Hier ist bei
Java:
e.getValue().inputProperty()
der Fehler "Cannot convert from String to ObservableValue<String>" Was muss ich hier ändern?
Java:
    private void tabellenInhalt() {
       
        TableColumn<Result, String> inputColumn = new TableColumn<>("Eingabe");
        TableColumn<Result, String> outputColumn = new TableColumn<>("Ausgabe");
        inputColumn.setCellValueFactory(e -> e.getValue().inputProperty());
        outputColumn.setCellValueFactory(e -> e.getValue().outputProperty());
        table.setItems(data);
        table.getColumns().addAll(inputColumn, outputColumn);
        data.add(new Result(textField.getText(), textArea.getText()));

    }
Hier meine Extra Klasse für den TabellenInhalt
Java:
package application;

import javafx.beans.property.SimpleStringProperty;

public class Result {
    private SimpleStringProperty input;
    private SimpleStringProperty output;
   
    public Result(String input, String output) {
        this.input = new SimpleStringProperty(input);
        this.output = new SimpleStringProperty(output);
    }
   
    public String inputProperty() {
        return input.get();
    }
   
    public String outputProperty() {
        return output.get();
    }

}
Und hier die Logik für das Erstellen des Textdokumentes
Hier ist wohl ein Fehler bei dem String text, da steht etwas von "+ is not defined"
Ebenso hier meine Frage: Was muss ich ändern?

Java:
    public void writeText() throws Exception {
        Writer writer = null;
        try {
            File file = new File("C:/Users/schnemic/Documents/KonverterCVS/abc.txt");
            writer = new BufferedWriter(new FileWriter(file));
            for (Result result : data) {
               
                String text = result.inputProperty() + result.outputProperty() + "\n";
                writer.write(text);
            }
           
        }catch (Exception ex) {
            ex.printStackTrace();
        }
        finally {
            writer.flush();
            writer.close();
        }
    }
 

friednoodles

Aktives Mitglied
lass das get() weg und gib die property zurück
Ich habe das get() weg gelassen und den beiden Methoden wieder public StringProperty statt einfach nur public String gegeben.
Der Fehler mit dem bei dem "+" wird mir immer noch angezeigt bei der Logik für das Beschreiben des Text Dokumentes :(

Und was genau meinst du mit Property zurückgeben?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2
D Zahlen mit nullen in einer Tabelle anzeigen AWT, Swing, JavaFX & SWT 2
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben