JavaFX TableView bleibt leer.

DefconDev

Bekanntes Mitglied
Hallo zusammen,

ich habe per SceneBuilder eine Tabelle angelegt, ohne Inhalt.

Jetzt möchte ich diese Tabelle mit Inhalt befüllen, nur die Daten aus meiner Klasse werden nicht übernommen.Lediglich Spalten und Zeilen werden angelegt aber die bleiben leer.

Das Bespiel ist dem Oracle Example nahezu identisch, aber irgendwas übersehe ich.

Java:
        @FXML TableView<Elo_Data> eloTableA;
	
	
	@FXML TableColumn<Elo_Data, String> playersColA;
	@FXML TableColumn<Elo_Data, String> playersEloColA;
	@FXML TableColumn<Elo_Data, String> playersNationEloColA;
	@FXML TableColumn<Elo_Data, String> playersMapEloColA;
	
    
	
	private final ObservableList<Elo_Data> data =
	        FXCollections.observableArrayList(
	            new Elo_Data("Jacob", "Smith", "jacob.smith@example.com","ggg"),
	            new Elo_Data("Isabella", "Johnson", "isabella.johnson@example.com","ggg"),
	            new Elo_Data("Ethan", "Williams", "ethan.williams@example.com","ggg"),
	            new Elo_Data("Emma", "Jones", "emma.jones@example.com","ggg"),
	            new Elo_Data("Michael", "Brown", "michael.brown@example.com","ggg")
	        );
	
	
	
	
	
	
	public void setTable(){
		eloTableA.setItems(data);
		System.out.println(data.size());
	}


Java:
public class Elo_Data {
	
	private SimpleStringProperty playersName;
    private SimpleStringProperty playersElo;
    private SimpleStringProperty playersNationElo;
    private SimpleStringProperty playersMapElo;
    
    public Elo_Data(String playersName, String playersElo, String playersNationElo, String playersMapElo){
    	this.playersName 		= new SimpleStringProperty(playersName);
    	this.playersElo 		= new SimpleStringProperty(playersElo);
    	this.playersNationElo 	= new SimpleStringProperty(playersNationElo);
    	this.playersMapElo 		= new SimpleStringProperty(playersMapElo);
    	
    	
    }

	public SimpleStringProperty getPlayersName() {
		return playersName;
	}

	public SimpleStringProperty getPlayersElo() {
		return playersElo;
	}

	public SimpleStringProperty getPlayersNationElo() {
		return playersNationElo;
	}

	public SimpleStringProperty getPlayersMapElo() {
		return playersMapElo;
	}

	public void setPlayersName(SimpleStringProperty playersName) {
		this.playersName = playersName;
	}

	public void setPlayersElo(SimpleStringProperty playersElo) {
		this.playersElo = playersElo;
	}

	public void setPlayersNationElo(SimpleStringProperty playersNationElo) {
		this.playersNationElo = playersNationElo;
	}

	public void setPlayersMapElo(SimpleStringProperty playersMapElo) {
		this.playersMapElo = playersMapElo;
	}

}
 

Flown

Administrator
Mitarbeiter
Also im Controller würde ich dir mal vorschlagen:
- Entweder du implementierst das Interface Initializeable (was aber aus der dev-Sicht deprecated ist)
- Oder du annotierst eine Methode (egal ob private oder public) mit @FXML und nennt sie initialize()

In dieser Methode setzt du mal deine Daten der TableView und am besten setzt du auch noch die CellValueFactory für jede einzelne Column, dann sollte das auch mit dem Anzeigen klappen.
 

DefconDev

Bekanntes Mitglied
Sorry dass ich mich jetzt erst melde.

Also die zwei Vorschläge hatte ich zuvor schon versucht, habe mir deine Ratschläge aus anderen Threads zu herzen genommen :). Leider aber selbes Ergebnis. Die Spalten und Zeilen werden

Eigentlich soll die Tabelle auch erst befüllt werden wenn ich einen Button drücke.



Die obere Tableview sieht so aus wenn ich den Button klicke oder es per initialize() mache.

Zuvor sieht sie dann unbefüllt aus wie die untere.
 

dzim

Top Contributor
Das Problem wird sein, dass du noch nicht die CellValueFactory (z.B. PropertyValueFactory) angegeben hast. Optional fehlt dann noch die CellFactory für die Darstellung (brauchst du aber eigentlich nur, wenn du nicht mit Strings arbeitest oder spezielle Tabellen-Zellen mit z.B. Buttons, etc benötigst).
 

DefconDev

Bekanntes Mitglied
Hi, habe das Projekt mal runtergebrochen aufs nötigste.

Java:
package tableview;


import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

public class MainController {
	
	@FXML TableView<Elo_Data> tableview;
	
	@FXML TableColumn<Elo_Data, String> col1;
	
	
	public final ObservableList<Elo_Data> data =
	        FXCollections.observableArrayList(
	        		new Elo_Data("Jacob", "Smith", "jacob.smith@example.com","ggg"),
		            new Elo_Data("Isabella", "Johnson", "isabella.johnson@example.com","ggg"),
		            new Elo_Data("Ethan", "Williams", "ethan.williams@example.com","ggg"),
		            new Elo_Data("Emma", "Jones", "emma.jones@example.com","ggg"),
		            new Elo_Data("Michael", "Brown", "michael.brown@example.com","ggg")
	            
	        );
	
	
	
	
	public void initialize(){
		System.out.println("dffff");
		
		setTable();
		col1.setCellValueFactory(
			    new PropertyValueFactory<Elo_Data,String>("firstName")
			);
	}
	
	public void setTable(){
		System.out.println(data.size());
		
		tableview.setItems(data);
		col1.setText("Test");
		
		System.out.println(data.size());
		System.out.println(tableview.visibleProperty());
		System.out.println(tableview.isVisible());
	}
	
	

}

Java:
package tableview;


import javafx.beans.property.SimpleStringProperty;

public class Elo_Data {
	
	private SimpleStringProperty playersName;
    private SimpleStringProperty playersElo;
    private SimpleStringProperty playersNationElo;
    private SimpleStringProperty playersMapElo;
    
    public Elo_Data(String playersName, String playersElo, String playersNationElo, String playersMapElo){
    	this.playersName 		= new SimpleStringProperty(playersName);
    	this.playersElo 		= new SimpleStringProperty(playersElo);
    	this.playersNationElo 	= new SimpleStringProperty(playersNationElo);
    	this.playersMapElo 		= new SimpleStringProperty(playersMapElo);
    	
    	
    }

	public SimpleStringProperty getPlayersName() {
		return playersName;
	}

	public SimpleStringProperty getPlayersElo() {
		return playersElo;
	}

	public SimpleStringProperty getPlayersNationElo() {
		return playersNationElo;
	}

	public SimpleStringProperty getPlayersMapElo() {
		return playersMapElo;
	}

	public void setPlayersName(SimpleStringProperty playersName) {
		this.playersName = playersName;
	}

	public void setPlayersElo(SimpleStringProperty playersElo) {
		this.playersElo = playersElo;
	}

	public void setPlayersNationElo(SimpleStringProperty playersNationElo) {
		this.playersNationElo = playersNationElo;
	}

	public void setPlayersMapElo(SimpleStringProperty playersMapElo) {
		this.playersMapElo = playersMapElo;
	}

}

Java:
package tableview;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Main extends Application{
	
	@Override
	public void start(Stage stage) throws Exception {
		FXMLLoader loader = new FXMLLoader(getClass().getResource("/tableview.fxml"));
		Parent root = loader.load();
		
		Scene scene = new Scene(root);
		 
		stage.setScene(scene);
		stage.show();
	}
	  
	public static void main(String[] args) {
	 launch(args);
	}

}

Java:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tableview.MainController">
   <children>
      <TableView fx:id="tableview" layoutX="6.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <columns>
          <TableColumn fx:id="col1" prefWidth="75.0" text="C1" />
          <TableColumn prefWidth="75.0" text="C2" />
            <TableColumn prefWidth="75.0" text="Column X" />
            <TableColumn prefWidth="75.0" text="Column X" />
            <TableColumn prefWidth="75.0" text="Column X" />
        </columns>
      </TableView>
   </children>
</AnchorPane>
 

Flown

Administrator
Mitarbeiter
Du musst die PropertyValueFactory richtig verwenden. Hier gehts um den Namen!

Auszug:

Code:
A convenience implementation of the Callback interface, designed specifically for use within the TableColumn cell value factory. An example of how to use this class is:


 TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
 firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
 

In this example, the "firstName" string is used as a reference to an assumed firstNameProperty() method in the Person class type (which is the class type of the TableView items list). Additionally, this method must return a Property instance. If a method meeting these requirements is found, then the TableCell is populated with this ObservableValue. In addition, the TableView will automatically add an observer to the returned value, such that any changes fired will be observed by the TableView, resulting in the cell immediately updating.

If no method matching this pattern exists, there is fall-through support for attempting to call get<property>() or is<property>() (that is, getFirstName() or isFirstName() in the example above). If a method matching this pattern exists, the value returned from this method is wrapped in a ReadOnlyObjectWrapper and returned to the TableCell. However, in this situation, this means that the TableCell will not be able to observe the ObservableValue for changes (as is the case in the first approach above).

Habs ausprobiert und es funktioniert.

Java:
package tableview;

import javafx.beans.property.SimpleStringProperty;

public class Elo_Data {

  private SimpleStringProperty playersName;
  private SimpleStringProperty playersElo;
  private SimpleStringProperty playersNationElo;
  private SimpleStringProperty playersMapElo;

  public Elo_Data(String playersName, String playersElo, String playersNationElo, String playersMapElo) {
    this.playersName = new SimpleStringProperty(playersName);
    this.playersElo = new SimpleStringProperty(playersElo);
    this.playersNationElo = new SimpleStringProperty(playersNationElo);
    this.playersMapElo = new SimpleStringProperty(playersMapElo);

  }

  public SimpleStringProperty playersNameProperty() {
    return playersName;
  }

  public SimpleStringProperty playersEloProperty() {
    return playersElo;
  }

  public SimpleStringProperty playersNationProperty() {
    return playersNationElo;
  }

  public SimpleStringProperty playersMapEloProperty() {
    return playersMapElo;
  }

  public void setPlayersName(SimpleStringProperty playersName) {
    this.playersName = playersName;
  }

  public void setPlayersElo(SimpleStringProperty playersElo) {
    this.playersElo = playersElo;
  }

  public void setPlayersNationElo(SimpleStringProperty playersNationElo) {
    this.playersNationElo = playersNationElo;
  }

  public void setPlayersMapElo(SimpleStringProperty playersMapElo) {
    this.playersMapElo = playersMapElo;
  }

}

Änderung im Controller:

Java:
col1.setCellValueFactory(new PropertyValueFactory<Elo_Data, String>("playersName"));

Ich persönlich bin ja der Fan von einem Callback und dann kann man das per Hand selektieren, aber jedem das seine.
 
Zuletzt bearbeitet:

DefconDev

Bekanntes Mitglied
Vielen Dank.

Das Detail hatte ich komplett übersehen. Dass der String == der Name der Referenz sein muss.

In erster Linie wollte ich nur das Oracle Beispiel umsetzen. Wie das mit den Callback umzusetzen ist, müsste ich mir erst mal anschauen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
T TableView Button onAction AWT, Swing, JavaFX & SWT 3
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
A TableView updatet sich nicht AWT, Swing, JavaFX & SWT 3
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
W TableView füllen AWT, Swing, JavaFX & SWT 18
missy72 JavaFX TableView / IconView mit MousEvent AWT, Swing, JavaFX & SWT 7
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
T TableView Zeilen einfärben AWT, Swing, JavaFX & SWT 13
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
D JavaFX Nullpointerexception wegen TableView AWT, Swing, JavaFX & SWT 2
S Alternative JavaFX TableView AWT, Swing, JavaFX & SWT 1
L JavaFX Tableview row callback AWT, Swing, JavaFX & SWT 0
G Bekomme ResultSet mittels ObservableList nicht ins TableView AWT, Swing, JavaFX & SWT 25
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J JavaFx TableView mit CheckBox AWT, Swing, JavaFX & SWT 4
P JavaFX TableView Zelle markieren AWT, Swing, JavaFX & SWT 3
L JavaFX Tableview Datamodel AWT, Swing, JavaFX & SWT 2
M TableView Zeile hinzufügen AWT, Swing, JavaFX & SWT 5
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
B TableView als PDF speichern AWT, Swing, JavaFX & SWT 8
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
L JavaFX TableView Column Sortierung AWT, Swing, JavaFX & SWT 1
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
L JavaFX TableView mit Aktionenbuttons AWT, Swing, JavaFX & SWT 1
C JavaFX Edit TableView in Verbindung mit SceneBuilder AWT, Swing, JavaFX & SWT 1
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
F JavaFX (Tree)TableView korrekt drucken AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
G JavaFX TableView Wert in Spalte ändern AWT, Swing, JavaFX & SWT 0
S JavaFx - ausgewählte Rows in Arraylist (Tableview) AWT, Swing, JavaFX & SWT 4
S JavaFX - Populate TableView AWT, Swing, JavaFX & SWT 2
N JavaFX TableView aus Map AWT, Swing, JavaFX & SWT 2
J TableView Daten werden nicht ausgegeben AWT, Swing, JavaFX & SWT 9
B JavaFX TableView aus Collection befüllen AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
zhermann TableView die zweite AWT, Swing, JavaFX & SWT 7
H Java FX List<AlbumsBean> in FXML TableView AWT, Swing, JavaFX & SWT 37
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
M JavaFX JavaFX ResultSet in TableView ausgeben AWT, Swing, JavaFX & SWT 2
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
M JavaFX berechneten Wert in TableView schreiben AWT, Swing, JavaFX & SWT 1
K JavaFX Message in TableView AWT, Swing, JavaFX & SWT 2
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
L JavaFX TableView mit Excelfunktion AWT, Swing, JavaFX & SWT 1
D JavaFX TableView AWT, Swing, JavaFX & SWT 2
L JavaFX TableView mit XYChart verbinden AWT, Swing, JavaFX & SWT 3
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
P JavaFX, TableView und Datenbank AWT, Swing, JavaFX & SWT 4
K TableView: 'Komplexes' Object AWT, Swing, JavaFX & SWT 11
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
F TableCell aus TableView holen AWT, Swing, JavaFX & SWT 8
K JavaFX TableView mit Rectangle AWT, Swing, JavaFX & SWT 3
M Befüllung der einzelnen Zeilen des TableView AWT, Swing, JavaFX & SWT 3
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
N JavaFX TableView füllt nicht das gesamte ScrollPanle aus AWT, Swing, JavaFX & SWT 2
M JavaFX TableView & CSS, Rand um Tabellenkopf entfernen AWT, Swing, JavaFX & SWT 3
L JavaFX ListView oder TableView Style überschreiben? AWT, Swing, JavaFX & SWT 6
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
J JavaFX TableView - Höhe der Zeilen AWT, Swing, JavaFX & SWT 3
L JavaFX TableView mit Attributs der Modellreferenzerierung für die Spalte AWT, Swing, JavaFX & SWT 3
I JavaFX Buttons und TableView AWT, Swing, JavaFX & SWT 2
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
B Java FX TableView Zeilen mit verschiedenen Typen AWT, Swing, JavaFX & SWT 15
Z JavaFX TableView cellValueFactory für Arrays AWT, Swing, JavaFX & SWT 2
E JavaFX TableView mit Rechtsklick Zelle auswählen AWT, Swing, JavaFX & SWT 8
C (JavaFX 8) SQLite Datenbank in einem TableView darstellen AWT, Swing, JavaFX & SWT 2
M JavaFX TableView nach Spalte sortieren AWT, Swing, JavaFX & SWT 1
P JavaFX Dynamische TableView AWT, Swing, JavaFX & SWT 14
V Java FX POJO aus Datenbank in FX TableView / Best Practice AWT, Swing, JavaFX & SWT 0
P JavaFX TableView Item hinzufügen AWT, Swing, JavaFX & SWT 20
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
M JavaFX Tutorial zu Tableview AWT, Swing, JavaFX & SWT 5
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben