Tableview, ObservableList ein bisschen dynamisch

Joob

Top Contributor
Ich versuche ein Suchfenster mit PreSelection zu bauen und benötige dafür eine TableVies. Dafür habe ich mir ein paar Beispiele angesehen, aber ich bekommen es nicht zusammen. Könnte jemand mal daraufschauen ?

Code Suchfenster


Java:
package application;


import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;


public class SBOX {

   static String output;

     public static String Open_S_Window(String str_sql, String str_colname, String str_colwidth) {

     Stage window = new Stage();


     //
     window.initModality(Modality.APPLICATION_MODAL);
     window.setTitle("Suche Mitglied");
     window.setWidth(600);
     window.setHeight(600);

     Label label = new Label();
     TextField inputfield = new TextField();

     TableView<?> TV_PreSelection = new TableView<Object>();

     TRFR trfr = new TRFR();
     ObservableList<ObservableList> TF_Def;


     label.setText("Suchtext :");

  /**********************************
  * TABLE COLUMN ADDED  *
  **********************************/

  TableColumn<TRFR, Integer> IDColumn = new TableColumn<>("ID");
  IDColumn.setMinWidth(0);
  IDColumn.setCellValueFactory( new PropertyValueFactory<>("ID"));

  TableColumn<TRFR, String> VNAMEColumn = new TableColumn<>("Vorname");
  VNAMEColumn.setMinWidth(20);
  VNAMEColumn.setCellValueFactory( new PropertyValueFactory<>("VNAME"));

  TableColumn<TRFR, String> NNAMEColumn = new TableColumn<>("Nachname");
  VNAMEColumn.setMinWidth(20);
  VNAMEColumn.setCellValueFactory( new PropertyValueFactory<>("NNAME"));

  str_sql = "SELCET ID, VNAME, NNAME FROM MEMBERS";
     InitTabView(str_sql);


  TV_PreSelection.setItems(trfr.BuildTVData(str_sql));

  TV_PreSelection.getColumns().addAll(IDColumn, VNAMEColumn, NNAMEColumn);



     //
     HBox eingabefeld = new HBox(20);
     eingabefeld.setAlignment(Pos.TOP_LEFT);
     eingabefeld.getChildren().addAll(label, inputfield);

     /*HBox suchfeld = new HBox(50);
     eingabefeld.setAlignment(Pos.CENTER);
     eingabefeld.getChildren().addAll(TV_PreSelection);*/

     VBox layout = new VBox(20);
     layout.getChildren().addAll(eingabefeld,TV_PreSelection);
     layout.setAlignment(Pos.CENTER);



     // Display window and wait for it to be closed
     Scene scene = new Scene(layout);
     window.setScene(scene);
     window.showAndWait();

     return output;
     }

     public static void InitTabView (String str_sql) {

     }

   }


Objekt zum Daten holen:
Das habe ich in der Klasse TRFR, die wollte ich für Transformationen von Daten verwenden.



Java:
    public ObservableList<?> BuildTVData(String StrSql) {

  ObservableList<String> row =FXCollections.observableArrayList();
     ObservableList<?> tf_def = FXCollections.observableArrayList();

     try{


      /**********************************
      * Resultset erstellen  *
      **********************************/
         DATA data = new DATA();
      ResultSet rs = data.getDataRecSet(StrSql);

      /********************************
      * Data added to ObservableList *
      ********************************/
      while(rs.next()){

         //Iterate Row
      for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
      //Iterate Column
      row.add(rs.getString(i));
      }
      System.out.println("Row [1] added "+ row );

      }
      tf_def.add(row);

      }catch(Exception e){
      e.printStackTrace();
      System.out.println("Error on Building Data");
      }

        return tf_def;

       }
 
Zuletzt bearbeitet von einem Moderator:

knilch

Bekanntes Mitglied
Hi,
Erst mal... formtatiere doch bitte deinen Code....
Zu deinen Problem... ziemlich schwierig, herauszufinden, was du genau möchtest. Genauso deine Codesnippets... diese sind nicht gerade hilfreich herauszufinden was du nun genau machen willst, bezw. wie deine Ansätze sind, da zum Teil auch noch Klassen fehlen (z.B. DATA...)

PS.
Verwende doch eine vernfünfigite Syntax um Klassen, Methoden etc. zu erstellen. Tip: CamelCase.
 

Joob

Top Contributor
Ich weiß nicht wie man Code in die Textbox einfügt.
Zum CamelCase, mach dann mal wieder, ich hatte mal gelesen in Java werden alle Variablen klein geschrieben, damit komm ich aber nicht gut zurecht. Komme von Visual Basic da hab ich immer im CamelCase geschrieben.

Zu meinem Problem:
Was will ich ?
Die Klasse SBOX steht für Suchbox und soll ein Fenster aufrufen, du siehst ja wie es aussehen soll. Nach Eingabe in das Textfeld soll das Tableview aktualisiert werden, und nach Auswahl einer Zeile soll dann die ID an die aufrufene Klasse zurückgeben. Die zeigt dann im Hauptfenster den Datensatz mit der ID an.

Klasse DATA habe ich nicht mitgegeben, funktioniert aber, auch die TRFR.BuildTVData(str_SQL) gibt ein schönes Array zurück mit den Daten aus dem resultset.
Das hab ich getestet indem ich eine Testklasse in mein Projekt eingefügt habe und dann mit Println ausgegeben haben. Brauchst du dir nicht anzuschauen, ich mußte noch eine Kleinigkeit korrigieren.
Sieht dann als String so aus (nur das hinter added]):
Row [1] added [1, Josef, Oberstadt]
Row [1] added [2, Frank, Weyers]
Row [1] added [3, Birgit, Wettingfeld]
Row [1] added [4, Georg, Romulitis]


In dem Zusammenhang hab ich noch eine Frage: Wenn ich eine Testklasse verwende habe ich im Projekt zwei main Prozeduren in zwei Klassen, ist das ein Problem. Testen funktioniert aber weil ich damit nicht ganz glücklich bin, ändere ich in der Testklasse nach dem Ausführen immer den Namen der Main Prozedur. Debuggern geht ja nur wenn ich einen Breakpoint setze, da komm ich aber erst gar nicht hin, weil ich das im folgenden geschilderte Problem habe.

So und jetzt zum Problem:
Also TRFR.BuildTVData(str_SQL) gibt zurück eine ObservabelList zurück
[public ObservableList<ObservableList> BuildTVData(String StrSql) {]

damit sollte doch eigentlich setItems zufrieden sein. Ist es aber nicht, es will das ich
public ObservableList<?> BuildTVData(String StrSql) {
und wenn es es bekommt meckert er immer noch.

Dann weiß ich nicht wofür das TRFR in der Column-Def steht. In den Beispeilen machen die da immer eine Klasse, das kann ich ja nicht weil ich ja aus einem resultset dynamisch die Daten auslesen will. In Ermangelung einer PRODUCT Klasse dachte ich mir geb ich Ihm eben die TRFR mit da steht ja auch drin wie die Daten für setitem gebaut werden.

TableColumn<TRFR, String> NNAMEColumn = new TableColumn<>("Nachname");

Sagt dir das was, aus der Exception

Caused by: java.lang.Error: Unresolved compilation problems:

The method setItems(ObservableList<capture#1-of ?>) in the type TableView<capture#1-of ?> is not applicable for the arguments (ObservableList<ObservableList>)

The method addAll(int, Collection<? extends TableColumn<capture#2-of ?,?>>) in the type List<TableColumn<capture#2-of ?,?>> is not applicable for the arguments (TableColumn<TRFR,Integer>, TableColumn<TRFR,String>, TableColumn<TRFR,String>)


Ich seh da zwar meine Problem, aber kapier nicht was ich machen muss um diese zu lösen.

Aber erst mal schönen Dank das du dir die Zeit genommen hast alles zu lesen, ich kann leider noch nicht so genau die Probleme beschreiben. Ich fang erst gerade an und bau mir eine kleine Anwendung, ich wollte zumindest die Hauptfenster am Laufen haben und dann noch mal ein bisschen Tutorial schauen um zu verbessern.
 

Flown

Administrator
Mitarbeiter
Also Code wirft man in die Code-Tags [code=java]//HERE[/code]
Dann sieht das auch so aus:
Java:
//HERE
 

Joob

Top Contributor
Ich habe hier noch einmal den Teil kopiert der mir die Probleme bereitet

Java:
  TableColumn<TRFR, Integer> IDColumn = new TableColumn<>("ID");
  IDColumn.setMinWidth(0);
  IDColumn.setCellValueFactory( new PropertyValueFactory<>("ID"));

  TableColumn<TRFR, String> VNAMEColumn = new TableColumn<>("Vorname");
  VNAMEColumn.setMinWidth(20);
  VNAMEColumn.setCellValueFactory( new PropertyValueFactory<>("VNAME"));

  TableColumn<TRFR, String> NNAMEColumn = new TableColumn<>("Nachname");
  NNAMEColumn.setMinWidth(20);
  NNAMEColumn.setCellValueFactory( new PropertyValueFactory<>("NNAME"));

  str_sql = "SELECT ID, VNAME, NNAME FROM MEMBERS";
     InitTabView(str_sql);


  TV_PreSelection.setItems(trfr.BuildTVData(str_sql));
  TV_PreSelection.getColumns().addAll(IDColumn, VNAMEColumn, NNAMEColumn);

Hier dann noch mal die Prozedur BuildTVData aus der Klasse TRFR

Java:
    public ObservableList<ObservableList> BuildTVData(String StrSql) {

     ObservableList<ObservableList> tv_def = FXCollections.observableArrayList();

     try{


      /**********************************
      * Resultset erstellen  *
      **********************************/
         DATA data = new DATA();
      ResultSet rs = data.getDataRecSet(StrSql);

      /********************************
      * Data added to ObservableList *
      ********************************/
      while(rs.next()){

      ObservableList<String> row =FXCollections.observableArrayList();

      //Iterate Row
      for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
      //Iterate Column
      row.add(rs.getString(i));
      }

      System.out.println("Row [1] added "+ row );
      tv_def.add(row);

      }


      }catch(Exception e){
      e.printStackTrace();
      System.out.println("Error on Building Data");
      }

        return tv_def;

       }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
T FX TableView Java Basics - Anfänger-Themen 5
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
T ScrollBar TableView Java Basics - Anfänger-Themen 6
B TableView: laufender Saldo mit BigDecimal? Java Basics - Anfänger-Themen 6
S TableView Items werden nicht angezeigt (+Verständnisfragen) Java Basics - Anfänger-Themen 15
L Neue Klasse für TableView? Java Basics - Anfänger-Themen 17
M JavaFX: Problem mit der TableView Java Basics - Anfänger-Themen 0
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
J Brauche Starthilfe für editable Tableview Java Basics - Anfänger-Themen 0
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
A ObservableList<String> Java Basics - Anfänger-Themen 6
P Veränderungen einer ObservableList Java Basics - Anfänger-Themen 10
M ObservableList wird nicht richtig geleert Java Basics - Anfänger-Themen 0
MrSnake ObservableList filtern Java Basics - Anfänger-Themen 5
F hat jmd Zeit mir bisschen zu helfen msn/skype Java Basics - Anfänger-Themen 10
S Bisschen hilfe beim Sudoku Lösen benötigt Java Basics - Anfänger-Themen 7
M Brauche ein bisschen Hilfe bei einem Programm Java Basics - Anfänger-Themen 10
E N bisschen was zum programmieren Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben