Ich arbeite mit JavaFX und ich möchte einen Filter implementieren, der Daten aus einer Datenbank zugreifen. Der folgende Code greift auf Daten aus zwei Tabellen in einer Datenbank zu. Die Daten werden retriviert und in eine Tabellenansicht mit javaFx eingefügt. Mein Problem ist, dass die letzte Spalte aus der Tabellenansicht leer bleibt. Der Code läuft gut, funktioniert gut, aber die letzte Spalte sollte nicht leer sein. Ich muss sagen, dass Daten für die letzte Spalte aus einer Tabelle stammen und die Daten für die anderen Spalten aus der anderen Tabelle stammen.Probleme mit Tabellenansicht und Tabellenspalten in JavaFX
Also, warum ist meine letzte Spalte leer?
@FXML
private void handleButtonAction(ActionEvent e) throws SQLException {
tableFilter.getItems().clear();
DBMain.createConnection();
DBMain.setStatement(DBMain.getConnection().createStatement());
ResultSet results=null;
CheckBox[] boxes = new CheckBox[]{checkAn1, checkAn2, checkAn3, checkSemestrul1, checkSemestrul2,
sdd, soo, analiza, algebra, marketing, economie, poo, cibernetica, contabilitate,curs1,curs2,curs3,curs4,curs5,curs6,curs7};
List<Function<Boolean, String>> clausesConstructor = Arrays.asList(
b -> b ? "an=1" : null,
b -> b ? "an=2" : null,
b -> b ? "an=3" : null,
b -> b ? "semestru=1" : null,
b -> b ? "semestru=2" : null,
b -> b ? "lower(denumire)='structuri de date'": null,
b -> b ? "lower(denumire)='sisteme de operare'": null,
b -> b ? "lower(denumire)='analiza'": null,
b -> b ? "lower(denumire)='algebra'": null,
b -> b ? "lower(denumire)='marketing'": null,
b -> b ? "lower(denumire)='economie'": null,
b -> b ? "lower(denumire)='programare orientata obiect'": null,
b -> b ? "lower(denumire)='cibernetica'": null,
b -> b ? "lower(denumire)='contabilitate'": null,
b -> b ? "numar_curs=1": null,
b -> b ? "numar_curs=2": null,
b -> b ? "numar_curs=3": null,
b -> b ? "numar_curs=4": null,
b -> b ? "numar_curs=5": null,
b -> b ? "numar_curs=6": null,
b -> b ? "numar_curs=7": null
);
List<String> list = IntStream.range(0, boxes.length)
.mapToObj(i -> clausesConstructor.get(i).apply(boxes[i].isSelected()))
.filter(Objects::nonNull).collect(Collectors.toList());
results=DBMain.getStatement().executeQuery(list.isEmpty() ? "SELECT * FROM discipline d, curs c " : list.stream().collect(Collectors.joining(") AND (", "SELECT * FROM discipline d, curs c WHERE c.id_disciplina=d.id_disciplina AND (", ")")));
System.out.println(list.isEmpty() ? "SELECT * FROM table" : list.stream().collect(Collectors.joining(") AND (", "SELECT * FROM discipline d, curs c WHERE c.id_disciplina=d.id_disciplina AND (", ")")));
while(results.next()){
String denumire=results.getString("denumire");
int an=(results.getInt("an"));
int semestru=(results.getInt("semestru"));
int numar_curs=(results.getInt("numar_curs"));
this.masterData.add(new Disciplina(denumire,an,semestru,numar_curs));
}
results.close();
DBMain.getStatement().close();
// Initialize the person table
Denumire.setCellValueFactory(
new PropertyValueFactory<Disciplina, String>("denumire"));
An.setCellValueFactory(
new PropertyValueFactory<Disciplina, Integer>("an"));
Semestru.setCellValueFactory(
new PropertyValueFactory<Disciplina, Integer>("semestru"));
numarCurs.setCellValueFactory(
new PropertyValueFactory<Disciplina, Integer>("numar_curs"));
tableFilter.setItems(masterData);
}
@FXML
private TableView<Disciplina> tableFilter;
@FXML
private TableColumn<Disciplina, String> Denumire;
@FXML
private TableColumn<Disciplina, Integer> An;
@FXML
private TableColumn<Disciplina, Integer> Semestru;
@FXML
private TableColumn<Disciplina, Integer> numarCurs;
public class Disciplina {
private String denumire;
private int an;
private int semestru;
private int numarCurs;
public Disciplina(String denumire, int an, int semestru, int nrCurs) {
this.denumire = denumire;
this.an = an;
this.semestru = semestru;
this.numarCurs = nrCurs;
}
public int getNrCurs() {
return numarCurs;
}
public void setNrCurs(int nrCurs) {
this.numarCurs = nrCurs;
}
public String getDenumire() {
return denumire;
}
public void setDenumire(String denumire) {
this.denumire = denumire;
}
public int getAn() {
return an;
}
public void setAn(int an) {
this.an = an;
}
public int getSemestru() {
return semestru;
}
public void setSemestru(int semestru) {
this.semestru = semestru;
}
}
Bitte geben Sie den Code für Ihre 'Disciplina' Klasse an. Außerdem werden Sie feststellen, dass Alt-PrintScreen und Einfügen in Paint viel bessere Werkzeuge zum Erstellen von Screenshots sind. – VGR
@VGR Ich habe die Klasse "Disciplina" hinzugefügt. –