Hallo
ich arbeite mit Netbeans8.1 und SceneBuilder8.5.0 unter Linux.
Mir gelingt es leider nicht, den Fehler beim Laden der Daten in eine TableView zu finden.
Deshalb bitte ich hier um Hilfe. Die Variante mit dem dynamischen Erstellen der TableColumns
würde ich nur ungern nutzen, ich bitte deshalb mir möglichst bei dieser Variante zu helfen.
Im Code sind einige Anmerkungen betreffs meiner Versuche und des Fehlers.
Klasse Vorgang für die ObservableList:
Laden der Vorgangsliste ins TableView
Im Prinzip geht es um die Zeile
die im Output statt der erwarteten FXCollections.observableArrayList() das hier erzeugt:
[samplefx.ctrl.Vorgang@17e2f267]
weshalb das Einfügen dann vermutlich die NullPointerException wirft.
Ich hoffe, jemand von Euch hat eine Idee.
Gottfried
ich arbeite mit Netbeans8.1 und SceneBuilder8.5.0 unter Linux.
Mir gelingt es leider nicht, den Fehler beim Laden der Daten in eine TableView zu finden.
Deshalb bitte ich hier um Hilfe. Die Variante mit dem dynamischen Erstellen der TableColumns
würde ich nur ungern nutzen, ich bitte deshalb mir möglichst bei dieser Variante zu helfen.
Im Code sind einige Anmerkungen betreffs meiner Versuche und des Fehlers.
Klasse Vorgang für die ObservableList:
Java:
package samplefx.ctrl;
/**
*
* @author gottfried
*/
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Vorgang {
private final StringProperty vnr; // sollte eigentlich als Integer definiert werden
private final StringProperty datum; // als Date -->
private final StringProperty vanr;
private final StringProperty vart;
private final StringProperty vbez;
private final StringProperty brutto; // als Double -->
private final StringProperty zedat; // als Date ---> alle auf String geändert, zum Testen
// Default constructor
// Constructor with some initial data.
public Vorgang(String vnr, String datum, String vanr, String vart, String vbez, String brutto, String zedat) {
this.vnr = new SimpleStringProperty(vnr);
this.datum = new SimpleStringProperty(datum);
this.vanr = new SimpleStringProperty(vanr);
this.vart = new SimpleStringProperty(vart);
this.vbez = new SimpleStringProperty(vbez);
this.brutto = new SimpleStringProperty(brutto);
this.zedat = new SimpleStringProperty(zedat);
}
//Getters
public String getVNR() {
return vnr.get();
}
public String getDatum() {
return datum.get();
}
public String getVANR() {
return vanr.get();
}
public String getVArt() {
return vart.get();
}
public String getVBez() {
return vbez.get();
}
public String getBrutto() {
return brutto.get();
}
public String getZEdat() {
return zedat.get();
}
//Setters
public void setVNR(String value) {
vnr.set(value);
}
public void setDatum(String value) {
datum.set(value);
}
public void setVANR(String value) {
vanr.set(value);
}
public void setVArt(String value) {
vart.set(value);
}
public void setVBez(String value) {
vbez.set(value);
}
public void setBrutto(String value) {
brutto.set(value);
}
public void setZEdat(String value) {
zedat.set(value);
}
//Property values
public StringProperty vnrProperty() {
return vnr;
}
public StringProperty datumProperty() {
return datum;
}
public StringProperty vanrProperty() {
return vanr;
}
public StringProperty vartProperty() {
return vart;
}
public StringProperty vbezProperty() {
return vbez;
}
public StringProperty bruttoProperty() {
return brutto;
}
public StringProperty zedatProperty() {
return zedat;
}
}
Laden der Vorgangsliste ins TableView
Code:
public void vorgangDat() {
String sknr = KNR.getText();
int knr = Integer.parseInt(sknr);
ObservableList daten = FXCollections.observableArrayList();
Connection conn = null;
try {
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(jhpn, uname, pw);
String sSQL = "SELECT vorgang.vnr, vorgang.datum, vorgang.vanr, vorgang.vart, vorgang.vbez, TO_CHAR(brutto.brutto, 'FM999G990D00') AS brutto,"
+ "vorgang.zedat FROM vorgang vorgang, brutto brutto WHERE vorgang.knr = " + "'" + knr + "'" + " AND vorgang.vnr = brutto.vnr ORDER BY vnr DESC";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sSQL);
while (rs.next()) {
daten.add(new Vorgang(rs.getString("vnr"), rs.getString("datum"), rs.getString("vanr"), rs.getString("vart"), rs.getString("vbez"), rs.getString("brutto"), rs.getString("zedat")));
JOptionPane.showMessageDialog(null, "String(): " + rs.getString("vbez")); // ---> hier wird der richtige Text angezeigt
}
System.out.println("Der Inhalt :" + daten); // ---> im Output: Der Inhalt :[samplefx.ctrl.Vorgang@17e2f267]
conn.close();
} catch (ClassNotFoundException | SQLException e) {
JOptionPane.showMessageDialog(null, "Fehler in vorgangDat(): " + e);
}
VNR.setCellValueFactory(new PropertyValueFactory<>("vnr")); // ---> worauf diese Zeile: Caused by: java.lang.NullPointerException wirft
Datum.setCellValueFactory(new PropertyValueFactory<>("datum"));
VANR.setCellValueFactory(new PropertyValueFactory<>("vanr"));
Art.setCellValueFactory(new PropertyValueFactory<>("vart"));
Bezeichnung.setCellValueFactory(new PropertyValueFactory<>("vbez"));
Bruttobetrag.setCellValueFactory(new PropertyValueFactory<>("brutto"));
Zahldatum.setCellValueFactory(new PropertyValueFactory<>("zedat"));
TableVorg.setItems(daten);
}
daten.add(new Vorgang(rs.getString("vnr"), rs.getString("datum"), rs.getString("vanr"), rs.getString("vart"), rs.getString("vbez"), rs.getString("brutto"), rs.getString("zedat")));
die im Output statt der erwarteten FXCollections.observableArrayList() das hier erzeugt:
[samplefx.ctrl.Vorgang@17e2f267]
weshalb das Einfügen dann vermutlich die NullPointerException wirft.
Ich hoffe, jemand von Euch hat eine Idee.
Gottfried