2016-04-10 11 views
0

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); 






} 

enter image description here

@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; 
    } 

} 
+1

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

+0

@VGR Ich habe die Klasse "Disciplina" hinzugefügt. –

Antwort

0

Du "numar_curs" zu Ihrem PropertyValueFactory Konstruktor übergeben, aber Ihre Datenklasse (Disciplina) hat eine Eigenschaft mit diesem Namen.

Übergeben Sie "nrCurs" anstelle von "numar_curs" an die PropertyValueFactory, da die Disciplina-Klasse über eine getNrCurs-Methode verfügt.

Vom PropertyValueFactory documentation:

firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));

In diesem Beispiel ist der „Firstname“ String wird als Hinweis auf eine angenommene firstNameProperty() Methode in der Klasse Person Typ verwendet (das ist der Klassentyp die TableView items Liste). Darüber hinaus müssen diese Methode eine Property Instanz zurück. ...

Wenn keine Methode für diese Muster existiert, gibt Durchfall Unterstützung ist für den Versuch zu erhalten() aufzurufen, oder ist() (das heißt, getFirstName() oder isFirstName() im Beispiel oben). ...

Verwandte Themen