List -Tableview-Javafx-Vererbung

MudiTrue

Mitglied
Hi, bin neu hier hatte gesehen, dass hier einige sehr gute Lösungen vorgeschlagen wurden, da dachte ich, ich versuch mal mein Glück.

Habe folgendes Problem:
VerwaltungsApp (Benutzeroberfläche) mit Javafx Tableview man kann Benutzer hinzufügen.
Die benutzer werden beim start aus einer .dat datei geladen , in der eine Serialized object list steckt.

habe 4 Klassen was die Verwaltung der Personen angeht:

Person ( int Typ,alter ; String vorname,nachname)
Student extends Person (int matrikelnummer ; String Studiengang)
Studentischehilfskraft extends Student (int arbeitsstunden ; String arbeitsort)
Angestellter extends Person (int arbeitsstunden ; String arbeitsort)

Das erste Problem:
Code:
     //Vornameame column
        TableColumn<Person, String> typColumn = new TableColumn<>("Typ");
        typColumn.setMinWidth(200);
        typColumn.setCellValueFactory(new PropertyValueFactory<>("typ"));


Wenn ich jetzt statt TableColumn<Person, String> eher TableColumn<Student, String>
eingebe weil ich die matrikelnummer populaten möchte taucht ein fehler auf und in person habe ich ja die matrikelnummer nicht drin....
________________________________________________________________________


Mein 2. Problem:




Code:
public ObservableList<Person> getPerson(){
        ObservableList<Person> person= FXCollections.observableArrayList();
        int i = indexOfList;

        String vorname=null;
        int arbeitsort= list.indexOf(2);
        String studiengang =null;
        String nachname = null;
        int alter=0;
        int freietage=0;
        int arbeitsstunden=0;
        int matrikelnummer=0;
        int typo=0;




        for(Person b :list){
           System.out.println(i +":  "+  b.toString());
           
           person.add(new Person(b.getVorName(), b.getNachName(), b.getTyp(), b.getAlter(), b.getTage()));
            person.add(new StudentischeHilfskraft(b.getVorName(), b.getNachName(),1, b.getAlter(), b.getTage(),"matrikelnummer","sss",i,"ss"));


            i++;
        };
        return person ;
    }


Aus der liste kann ich ja ganz leicht die informationen rausziehen die ich möchte, alerdings wieder nur bedingt, da ich die Liste in der Klasse Person angelegt habe, die anderen Klassen erben diese zwar auch, und wenn ich list.toString(); ausgeben lasse funktioniert alles einwandfrei und sogar matrikelnummer und studiengang werden ausgegeben,
aber mit der Tableview funktioniert das halt nicht und ich kann die matrikelnummer nicht aus der liste ziehen hängt ja mit problem nummer 1 zusammen.... :/
und ich möchte ungern alle daten in der Klasse Person initialisieren/deklarieren.

Hier der ganze code von der Main methode.

der Code gibt alles 2 mal wieder einmal Oberfläche und einmal in der Console.
Consolenprogramm funktioniert super nur die GUI nicht


Was kann ich jetzt denn tun? Seitze seit 11 Stunden ohne einen fortschritt dran. habe sovieles schon ausgetestet


Danke schonmal!!!!!!
Java:
public class Main extends Application {
    static Scanner scanner = new Scanner(System.in);
    Button button;
    TextField nameInput,vornameInput, alterInput, freieTageInput, arbeitsOrtInput, arbeitsStundenInput, matrikelNummerInput, studiengangInput;
    Stage window;
    TableView<Person> table;
    int indexOfList;
    ChoiceBox<String> typAuswahl;

    public static void main(String[] args) {
        launch(args);

        System.out.println("                                *  Hauptmenue  *");
        System.out.println("                                ________________");
        System.out.println("");
        System.out.println("Waehlen Sie eines der beiden Ausfuehrungarten aus:");
        System.out.println("    ------------------------------------------------------------------------");
        System.out.println("   (1)  GUI");
        System.out.println("   (2)  Console ");
        System.out.println("Geben Sie eine Zahl ein:");
        checkint();
        int w12 = scanner.nextInt();
        switch (w12) {
            case 1:
                launch(args);
                break;
            case 2:
                Hauptmenu();
                break;



            default:    System.out.println("Ungueltige Eingabe; versuchen Sie es erneut:");
                Hauptmenu();
                break;
        }
    }

    public static void Hauptmenu() {
        System.out.println(" ");
        System.out.println(" ");
        System.out.println("                                ________________");
        System.out.println(" ");
        System.out.println("                                *  Hauptmenue  *");
        System.out.println("                                ________________");
        System.out.println("");
        System.out.println("Waehlen Sie eines der beiden Dateiformate aus:");
        System.out.println("    ------------------------------------------------------------------------");
        System.out.println("   (1)  .CSV");
        System.out.println("   (2)  .DAT");
        System.out.println("Geben Sie eine Zahl ein:");
        checkint();
        int w1 = scanner.nextInt();
        switch (w1) {
            case 1: System.out.println(" ");
                System.out.println(" ");
                System.out.println("                                ________________");
                System.out.println(" ");
                System.out.println("                                *  Hauptmenue .CSV *");
                System.out.println("                                ________________");
                System.out.println("");
                System.out.println("Sie koennen hier Personen der Hochschule fuer Technik und Wirtschaft verwalten:");
                System.out.println("    ------------------------------------------------------------------------");
                System.out.println("   (1)  Anlegen");
                System.out.println("   (2)  Suchen nach Arrayposition");
                System.out.println("   (3)  Filtern");
                System.out.println("   (4)  Nach Typ ausgeben");
                System.out.println("   (5)  Alle zeigen");
                System.out.println("   (6)  CSV anzeigen");
                System.out.println("   (7)  GUI- oberfläche");
                System.out.println("   (6)  Programm beenden");
                System.out.println("");
                System.out.println("Geben Sie eine Zahl ein:");
                checkint();
                int w2 = scanner.nextInt();
                switch (w2) {
                    case 1: add();
                        break;
                    case 2: Read();
                        break;

                    case 3: ReadFilter();
                        break;
                    case 4:ReadAll();
                        break;
                    case 5:ReadAll(2);
                        break;
                    case 6:CSVReadALL();
                        break;
                    case 7:
                        break;


                    default:    System.out.println("Ungueltige Eingabe; versuchen Sie es erneut:");
                        Hauptmenu();
                        break;
                }
                break;
            case 2:  System.out.println(" ");
                System.out.println(" ");
                System.out.println("                                ________________");
                System.out.println(" ");
                System.out.println("                                *  Hauptmenue  *");
                System.out.println("                                ________________");
                System.out.println("");
                System.out.println("Sie koennen hier Personen der Hochschule fuer Technik und Wirtschaft verwalten:");
                System.out.println("    ------------------------------------------------------------------------");
                System.out.println("   (1)  Anlegen");
                System.out.println("   (2)  Suchen nach Arrayposition");
                System.out.println("   (3)  Filtern");
                System.out.println("   (4)  Nach Typ ausgeben");
                System.out.println("   (5)  Alle zeigen");
                System.out.println("");
                System.out.println("   (6)  Programm beenden");
                System.out.println("");
                System.out.println("Geben Sie eine Zahl ein:");
                checkint();
                int w3 = scanner.nextInt();
                switch (w3) {
                    case 1: add();
                        break;
                    case 2: Read();
                        break;

                    case 3: ReadFilter();
                        break;
                    case 4:ReadAll();
                        break;
                    case 5:ReadAll(2);
                        break;
                    case 6:CSVReadALL();
                        break;
                    default:    System.out.println("Ungueltige Eingabe; versuchen Sie es erneut:");
                        Hauptmenu();
                        break;
                }
                break;




            default:    System.out.println("Ungueltige Eingabe; versuchen Sie es erneut:");
                Hauptmenu();
                break;
        }




    }

    private static void CSVReadALL() {
        String fileName= "personTest.csv";
        File file = new File(fileName);
        try{
            Scanner inputSream = new Scanner(file);
            while(inputSream.hasNext()){
                String data = inputSream.next();
                System.out.println(data);
            }
            inputSream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    private static void CSVOutput() {

    }

    private static void add() {
      
      
         System.out.println("Vorname : ");
         String vorname  = scanner.next();

         System.out.println("Nachname : ");
         String nachname  = scanner.next();

         System.out.println("Alter : ");
         checkint();
         int alter =    checkintR(18,65,true);
       
         System.out.println("Freie Wochentage : ");
         checkint();
         int freieTage =    checkintR(1,6,true);

      
      
        System.out.println("Waehlen Sie den Typ der Person aus;");
      
        System.out.println("1 fuer Angestellte ; 2 fuer Student ; 3 fuer studentische Mitarbeiter :   ");
    
        int typ =  checkintR(1,3,false);
      
        switch(typ) {
        case 1:      

             System.out.println("ArbeitsOrt: ");
             String ort  = scanner.next();

      

             System.out.println("Arbeitsstunden pro Woche : ");
             checkint();
             int stunden =    checkintR(1,40,true);
           
             Person.add(new Angestellte(  vorname, nachname,  typ, alter , freieTage, stunden, ort ));
            // Angestellte.add(new Angestellte(vorname, nachname,  typ, alter , freieTage, stunden, ort));
             break;
        case 2:      
             System.out.println("Matrikelnummer : ");
             checkint();
             int matrikel=  checkintR(11111,66666,true);
           
             System.out.println("Studiengang : ");
             String studiengang  = scanner.next();
  
           
             Person.add(new Student( vorname, nachname,  typ, alter , freieTage, matrikel, studiengang ));
        //     Student.add(new Student( vorname, nachname,  typ, alter , freieTage, matrikel, studiengang));
      
            break;
        case 3:      
             System.out.println("Matrikelnummer : ");
             checkint();
             int matrikel1=  checkintR(11111,66666,true);
           
             System.out.println("Studiengang : ");
             String studiengang1  = scanner.next();
  
             System.out.println("ArbeitsOrt: ");
             String ort1  = scanner.next();

             System.out.println("Arbeitsstunden pro Woche : ");
             checkint();
             int stunden1 =    checkintR(1,40,true);

           
             Person.add(new StudentischeHilfskraft(  vorname, nachname,  typ, alter , freieTage, matrikel1,studiengang1, stunden1, ort1 ));
            // StudentischeHilfskraft.add(new StudentischeHilfskraft( vorname, nachname,  typ, alter , freieTage, matrikel1,studiengang1, stunden1, ort1));
      
            break;
      
    
        }


        System.out.println("");
        Hauptmenu();
    }

    public static void Read() {
        System.out.println("Index : ");
        if(Person.getAnzahl() == 0){
            System.out.println("keine Personen eingetragen");
            Hauptmenu();
        }else{
        int index = checkintR(1,Person.getAnzahl(),false);
        Person.read(index-1);

        System.out.println("");
        Hauptmenu();
    }}

    public static void ReadAll(int a ) {
      
        Person.readAll();


        System.out.println("");
        Hauptmenu();
    }

    public static void ReadFilter( ) {

        try {
            Person.readAll();
        } catch (Exception e) {
            e.printStackTrace();
        }


        System.out.println("");
        Hauptmenu();
    }
  
    public static void ReadAll() {
      
       // Person.readAll();
        Student.readAll(2);
        StudentischeHilfskraft.readAll(2);
        Angestellte.readAll(2);

        System.out.println("");
        Hauptmenu();
    }

    public static int checkintR(int start,int end,boolean alter) {
        checkint();
        int value = scanner.nextInt();

        while (value < start || value > end){
            if (alter) {
                System.out.println("Bitte geben Sie eine Zahl zwischen "+start+" und "+end+" ein");
            }else{
                System.out.println("Bitte geben Sie eine Zahl zwischen "+start+" und "+end+" ein");
            }
            return checkintR(start,end,alter);
        }
           return value;
    }

  
    public static void checkint() {
        while (!scanner.hasNextInt()) {
            System.out.println("Bitte geben Sie nur Zahlen ein: ");
            scanner.next();
        }
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("Verwaltung!");





        //TypAuswahl
         typAuswahl = new ChoiceBox<>();
        typAuswahl.getItems().addAll("Typ Auswahl","Student","Studentische Hilfskraft","Angestellter");
        typAuswahl.setValue("Typ Auswahl");


        //Vornameame column
        TableColumn<Person, String> typColumn = new TableColumn<>("Typ");
        typColumn.setMinWidth(200);
        typColumn.setCellValueFactory(new PropertyValueFactory<>("typ"));

        //Vornameame column
        TableColumn<Person, String> vornameColumn = new TableColumn<>("Vorname");
        vornameColumn.setMinWidth(200);
        vornameColumn.setCellValueFactory(new PropertyValueFactory<>("VorName"));

        //Name column
        TableColumn<Person, String> nachnameColumn = new TableColumn<>("Nachname");
        nachnameColumn.setMinWidth(200);
        nachnameColumn.setCellValueFactory(new PropertyValueFactory<>("NachName"));



        //Alter column
        TableColumn<Person, Integer> alterColumn = new TableColumn<>("Alter");
        alterColumn.setMinWidth(100);
        alterColumn.setCellValueFactory(new PropertyValueFactory<>("alter"));

        //freieTage column
        TableColumn<Person, Integer> tageColumn = new TableColumn<>("Freie Tage");
        tageColumn.setMinWidth(100);
        tageColumn.setCellValueFactory(new PropertyValueFactory<>("tage"));

        //arbeitsOrtColumn
        TableColumn<Person, Integer> arbeitsOrtColumn = new TableColumn<>("Arbeitsort");
        arbeitsOrtColumn.setMinWidth(100);
        arbeitsOrtColumn.setCellValueFactory(new PropertyValueFactory<>("Arbeitsort"));

        //arbeitsstundenColumn column
        TableColumn<Person, Integer> arbeitsstundenColumn = new TableColumn<>("Arbeitsstunden");
        arbeitsstundenColumn.setMinWidth(100);
        arbeitsstundenColumn.setCellValueFactory(new PropertyValueFactory<>("Arbeitsstunden"));

        //IDColumn column
        TableColumn<Person, Integer> IDColumn = new TableColumn<>("ID");
        IDColumn.setMinWidth(100);
        IDColumn.setCellValueFactory(new PropertyValueFactory<>("Arbeitsstunden"));


        //matrikelnummerColumn column
        TableColumn<Person, Integer> matrikelnummerColumn = new TableColumn<>("Matrikelnummer");
        matrikelnummerColumn.setMinWidth(100);
        matrikelnummerColumn.setCellValueFactory(new PropertyValueFactory<>("matrikelnummer"));

        //arbeitsstundenColumn column
        TableColumn<Person, String> studiengangColumn = new TableColumn<>("Studiengang");
        studiengangColumn.setMinWidth(100);
        studiengangColumn.setCellValueFactory(new PropertyValueFactory<>("studiengang"));


        //Name input
        vornameInput = new TextField();
        vornameInput.setPromptText("Vorname ");
        vornameInput.setMinWidth(100);

        //Name input

        nameInput = new TextField();
        nameInput.setPromptText("Nachname ");
        nameInput.setMinWidth(100);


        //alter input

        alterInput = new TextField();
       alterInput.setPromptText("Alter");

        //freie Tage input
        freieTageInput = new TextField();
        freieTageInput.setPromptText("Freie Tage");


        //arbeitsort input
        arbeitsOrtInput = new TextField();
        arbeitsOrtInput.setPromptText("Arbeitsort");
        //freie Tage input
        arbeitsStundenInput= new TextField();
        arbeitsStundenInput.setPromptText("arbeitsStundenInput");
        //matrikelNummerInput
        matrikelNummerInput = new TextField();
        matrikelNummerInput.setPromptText("matrikelNummerInput");
        //studiengangInput
        studiengangInput = new TextField();
        studiengangInput.setPromptText("studiengangInput");


        //Button
        Button addButton = new Button("Hinzufuegen");
        addButton.setOnAction(e -> addButtonClicked() );

        Button deleteButton = new Button("Loeschen");
        deleteButton.setOnAction(e -> deleteButtonClicked());

        HBox hBox = new HBox();
        hBox.setPadding(new Insets(10,10,10,10));
        hBox.setSpacing(10);
        hBox.getChildren().addAll(typAuswahl,vornameInput,nameInput, alterInput, freieTageInput,arbeitsOrtInput,arbeitsStundenInput,matrikelNummerInput,studiengangInput, addButton, deleteButton);


        table = new TableView<>();
        table.setItems(getPerson());
        table.setItems(getPerson());
        table.getColumns().addAll(typColumn,vornameColumn, nachnameColumn, alterColumn, tageColumn, arbeitsOrtColumn, arbeitsstundenColumn, studiengangColumn, matrikelnummerColumn);

        VBox vBox = new VBox();
        vBox.getChildren().addAll(table, hBox);

        Scene scene = new Scene(vBox);
        window.setScene(scene);
        window.show();

    }



   // private static List<Person> list = (List)Person.loadE("personTest.dat" );//laden aus Datei

    private static List<Person> list = (List)Person.loadE("personTest.dat" );//laden aus Datei


    public ObservableList<Person> getPerson(){
        ObservableList<Person> person= FXCollections.observableArrayList();
        int i = indexOfList;

        String vorname=null;
        int arbeitsort= list.indexOf(2);
        String studiengang =null;
        String nachname = null;
        int alter=0;
        int freietage=0;
        int arbeitsstunden=0;
        int matrikelnummer=0;
        int typo=0;

//        StudentischeHilfskraft studentischeHilfskraft = new StudentischeHilfskraft(vorname,nachname,typo,alter,freietage,matrikelnummer,studiengang,arbeitsstunden,"dd");



        for(Person b :list){
           // System.out.println(i +":  "+  b.toString());
            System.out.println(i +":  "+StudentischeHilfskraft.getArbeitsstunden()+" List"+ StudentischeHilfskraft.getList().get(i).toString());
            person.add(new Person(b.getVorName(), b.getNachName(), b.getTyp(), b.getAlter(), b.getTage()));
            person.add(new StudentischeHilfskraft(b.getVorName(), b.getNachName(),1, b.getAlter(), b.getTage(),b.toString().indexOf("matrikelnummer"),"sss",i,"ss"));
          //  person.add(new Person(b.getVorName(), b.getNachName(), b.getTyp(), b.getAlter(), b.getTage(),b.getMatrikel(),b.getArbeitsstunden(), b.getArbeitsort());

            i++;
        };

/*
        ObservableList<StudentischeHilfskraft> personStu= FXCollections.observableArrayList();
        for(Person b3 :list){
            System.out.println(i +":  "+  b3.toString());
            System.out.println(i +":  "+  b3.toString());
            person.add(new StudentischeHilfskraft(b3.getVorName(), b3.getNachName(),1, b3.getAlter(), b3.getTage(),b3.toString().indexOf("matrikelnummer"),"sss",i,"ss"));
          //  System.out.println(studentischeHilfskraft.getArbeitsort());

            i++;
        }; */

        return person ;
    }


    //Add button clicked
    public void addButtonClicked(){

        /* Person person = new Person( vorname, nameInput.getText(),  1,Integer.parseInt(priceInput.getText()) , 2);
        person.setVorname(nameInput.getText());
        person.setNachName(nameInput.getText());
        person.setAlter((int) Double.parseDouble(priceInput.getText()));
        person.setTage(Integer.parseInt(quantityInput.getText())); */
        //System.out.println(nameInput.getText());

        if(typAuswahl.getValue()=="Student"){
            if(validateAlter(alterInput.getText())&&validatefreieTage(freieTageInput.getText())){
                System.out.println(nameInput.getText() + " Vorname:"+vornameInput.getText()+" Alter;"+Integer.parseInt(alterInput.getText()));
                int typ=2;
                int freieTage=2;
                int stunden=2;
                String ort="BerlinCity";

                Person.add(new Angestellte(vornameInput.getText(),nameInput.getText(),typ,Integer.parseInt(alterInput.getText()),freieTage, stunden, ort ));
                Angestellte.add(new Angestellte(vornameInput.getText(), nameInput.getText(),  typ, Integer.parseInt(alterInput.getText()) ,stunden , stunden, ort));

                //     table.getItems().add(Person.get);

                //table.getItems().add(person);
                nameInput.clear();
                alterInput.clear();
                freieTageInput.clear();
            }
            else{
                System.out.println("Fehler");
            }

        }
        else {
            System.out.println(typAuswahl.getValue());
        }


    }


    //Delete button clicked
    public void deleteButtonClicked(){
        ObservableList<Person> productSelected, allPersons;
        allPersons = table.getItems();
        productSelected = table.getSelectionModel().getSelectedItems();

        productSelected.forEach(allPersons::remove);
    }




    //__________________________________VAlidation

    private boolean validateAlter(String text){
        Pattern p = Pattern.compile("[0-9]+");

        Matcher m = p.matcher(text);
        if(m.find() && m.group().equals(text)){

            if( (Integer.parseInt(text) >=18)&& (Integer.parseInt(text) <=110)){
                return true;
            }

            else{
                Alert alert = new Alert(Alert.AlertType.WARNING);
                alert.setTitle("Validierung vom Alter fehlgeschlagen");
                alert.setContentText("Validierung vom Alter fehlgeschlage; Geben sie ein Alter zwischen 18 und 110 Jahren ein " +
                      text+  " Passt nicht in den Intervall");
                alert.showAndWait();
                return false;
            }
        }
        else{
            Alert alert = new Alert(Alert.AlertType.WARNING);
            alert.setTitle("Validierung vom Alter fehlgeschlagen");
            alert.setContentText("Validierung vom Alter fehlgeschlage; Geben sie ein Alter zwischen 18 und 110 Jahren ein " +
                    text +"Passt nicht in den Intervall");
            alert.showAndWait();
            return false;
        }
    }


    //__________________________________VAlidation

    private boolean validatefreieTage(String text){
        Pattern p = Pattern.compile("[0-9]+");
        Matcher m = p.matcher(text);
        if(m.find() && m.group().equals(text)){

            if( (Integer.parseInt(text) >=0)&& (Integer.parseInt(text) <=6)){
                return true;
            }

            else{
                Alert alert = new Alert(Alert.AlertType.WARNING);
                alert.setTitle("ValidateNumbverrr");
                alert.setContentText("Sie können Maximal 6 freie Tage in der Woche habe und Minimal 0 " +
                        " Somit stimmt "+text+" nicht überein");
                alert.showAndWait();
                return false;
            }
        }
        else{
            Alert alert = new Alert(Alert.AlertType.WARNING);
            alert.setTitle("ValidateNumbverrr");
            alert.setContentText("Bitte eine Zahl eingeben "+text+" ist keine Zahl");
            alert.showAndWait();
            return false;
        }
    }



}
 
habe sovieles schon ausgetestet
Wir schreiben hier Dir doch keine fertige Uni-Verwaltung.... Das kannst Du schön selbst machen.... und auf die Tränendrüse drücken gibts bei mir nicht.

populaten möchte taucht ein fehler auf und in person habe ich ja die matrikelnummer nicht drin....
das ist verständlich, weil der Typ der Liste Person ist.
Überlege Dir auf wie viele Arte das zu umgehen ist.
Am Besten wäre noch eine erweiterbare/ausklappbare Liste und eine Fallunterscheidung vorzunehmen....

Das ist similar zum ersten Problem....

Noch Fragen?
 
Wir schreiben hier Dir doch keine fertige Uni-Verwaltung.... Das kannst Du schön selbst machen.... und auf die Tränendrüse drücken gibts bei mir nicht.
Danke für deine unverschämte Antwort. Ich habe lediglich nur auf einige Tips gehofft. Wer hat was vom Schreiben erwähnt? Es ist doch schon fertig, nur die TableView spackt.....
das ist verständlich, weil der Typ der Liste Person ist.
Überlege Dir auf wie viele Arte das zu umgehen ist.
Am Besten wäre noch eine erweiterbare/ausklappbare Liste und eine Fallunterscheidung vorzunehmen....

Klar das weis ich ja, allerdings wusste ich nicht, wie ich es sonst machen sollte... erweiterbare Liste? inwiefern?
 
Eine erweiterbare Liste meinte ich so was:
Code:
A         B         C         
aaa.......-.........-.........
aa........b.........-.........
a.........bb........ccc.......
aa........b.........cc........
aaaa......-.........-.........

verständlich?
 
danke dir für die Hilfe.

klar verständlich, aber ich hab es doch genauso.. 😕
Code:
Name                 Matrikel        Studiengang       4.Coloum
DerWissende.-. 333333-.        Informatik         auchIn Liste
MudiTrue .... .    33332.-.        Sport                  erscheint aber
a.........                  bb.......         .ccc.......              nicht
aa.......                 .b.........          cc........
aaaa.....                .-........           .-.........




Ich glaube ich hatte mein problem schlecht erklärt oder? jetzt bin ich noch verwirrter....

die ersten 4 columns kann ich sehen, die restlichen aber nicht, da sind irgendwelche defaultwerte die ich einfach eingegeben habe, laden aber nicht von der .dat

Ich habe halt nur eine liste <Person> und da sind 8 items enthalten Name Matrikel Studiengang 4.Coloum nummer Handy etc

in der Console mache ich das selbe, da lädt aber alles ganz normal von der einen List und alle coloumns erscheinen , meinst du etwas ich soll 2 verschiedene Tables erstellen?
 
Meinst Du so etwas in der Richtung?

Java:
matrikelnummerColumn.setCellValueFactory(data -> new ReadOnlyObjectWraper<String>(
    (data.getValue() instanceof StudentischeHilfskraft)
        ? ((StudentischeHilfskraft) data.getValue()).getMatrikel()
        : ""));
 
Meinst Du so etwas in der Richtung?

Java:
matrikelnummerColumn.setCellValueFactory(data -> new ReadOnlyObjectWraper<String>(
    (data.getValue() instanceof StudentischeHilfskraft)
        ? ((StudentischeHilfskraft) data.getValue()).getMatrikel()
        : ""));
VIELEN DANK!!!!!

das löst zwar nicht mein Problem aber dank dir nen Stück viel weiter.

mein Problem liegt in der ObservableList<Person> getPerson() methode

Java:
person.add(new StudentischeHilfskraft(b.getVorName(), b.getNachName(),b.getTyp(), b.getAlter(), b.getTage(),    0 , " LEER ",000,"ArbeitsOrt"));

--->> 0 , " LEER ",000,"ArbeitsOrt"
Die 4 sind zwar in meiner list aber bekomm die nicht einzeln ausgebeben.
bei einem b.toString() funkt die ganze ausgabe, deshalb dachte ich mir ich benutzt mal nen string.split() aber der wird überlastet... und crashed irgendwann wenn ich einen part rausnehmen möchte.
Java:
String string = list.get(i).toString();
            String parts[] = string.split(":");
            for(int g =0; g<parts.length;g++){
                System.out.println("------>" +parts[g]);

wenn ich es doch schaffen sollte den string zu splitten, dann würde es easy gehen.
zb. part[4]=matrikelnummer; und die Tabelle würde dies ausgeben
 
Mach doch einfach
Java:
public ObservableList<Person> getPerson(){
        return FXCollections.observableArrayList(list);
}
 
Mach doch einfach
Java:
public ObservableList<Person> getPerson(){
        return FXCollections.observableArrayList(list);
}
omg .... danke hahah
ich bin gerade fertig geworden mit meiner Lösung und dann kommt einfach nur ein returnwert haha dankeeee

ich zeig dir mal was ich gemacht habe 😵🙄😕


Java:
  public ObservableList<Person> getPerson(){
        ObservableList<Person> person= FXCollections.observableArrayList();
        int i = indexOfList;




        for(Person b :list){
            // System.out.println(i +":  "+  b.toString());

if(b.getTyp()==1){


    System.out.println("Das sind die Splittungen"  +" | ______________________________________________________ab hier tyname : "+b.getTypName());
    String string = list.get(i).toString();
    String parts[] = string.split(":");
    for(int g =0; g<parts.length;g++){
        System.out.println("------>" +parts[g]);
    }

    System.out.println("------<<<<<<<<<<<<<<<<<<<<<<>" +parts[5]);

    System.out.println("Das STring :: " +b.toString() +"    TYP!" +b.getTyp());
      System.out.println("Das sind ddd    " +Integer.parseInt(parts[13]));

    //  person.add(new Person(b.getVorName(), b.getNachName(), b.getTyp(), b.getAlter(), b.getTage()));
    person.add(new StudentischeHilfskraft(b.getVorName(), b.getNachName(),b.getTyp(), b.getAlter(), b.getTage(), 0, null,Integer.parseInt(parts[13]),parts[11]));

    i++;
}

           else if(b.getTyp()==2){


    System.out.println("Das sind die Splittungen"  +" | ab hier Studen Typname : "+b.getTypName());

    // SPlit beginnt vom string
    String string = list.get(i).toString();
    String parts[] = string.split(":");
    for(int g =0; g<parts.length;g++){
        System.out.println("------>" +parts[g]);
    }

    System.out.println("------<<<<<<<<<<<<<<<<<<<<<<>" +parts[5]);

    System.out.println("Das STring :: " +b.toString() +"    TYP!" +b.getTyp());
    //   System.out.println("Das sind ddd    " +b.toString());

    //  person.add(new Person(b.getVorName(), b.getNachName(), b.getTyp(), b.getAlter(), b.getTage()));
    person.add(new StudentischeHilfskraft(b.getVorName(), b.getNachName(),b.getTyp(), b.getAlter(), b.getTage(),Integer.parseInt(parts[3]), parts[13],0,null));

    i++;

            }



                //Studentische Mitarbeiter

           else if(b.getTyp()==3){
    System.out.println("Das sind die Splittungen"  +" | ab hier tyname : "+b.getTypName());




    String string = list.get(i).toString();
    String parts[] = string.split(":");
    for(int g =0; g<parts.length;g++){
        System.out.println("------>" +parts[g]);
    }

   // System.out.println("------<<<<<<<<<<<<<<<<<<<<<<  5 Stelle !" +parts[5]);



    person.add(new StudentischeHilfskraft(b.getVorName(), b.getNachName(),b.getTyp(), b.getAlter(), b.getTage(),Integer.parseInt(parts[3]), parts[13],Integer.parseInt(parts[17]),parts[15]));

    i++;
            }

        }



        return person ;
 
    }




ich sitze so lange dran nur wegen einer zeile? hahahah ich kriege meine macken , danke nochmal!!!!!
 
@MudiTrue Habe das Problem nachgeblättert.... Java ist invariant. Mach das doch einfach so:

CD3.png

Person, Student und SMitarbeiter können nach einer Zeile gefragt werden....
und wenn Student oder Person zum Beispiel keine Matrikelnummer anbieten dann wird "" (String ohne Inhalt) oder null von TRow für TCol zurück-gegeben.
ListOfPerson hält einfach eine Liste mit Personen....
 
@MudiTrue Habe das Problem nachgeblättert.... Java ist invariant. Mach das doch einfach so:

Anhang anzeigen 11058

Person, Student und SMitarbeiter können nach einer Zeile gefragt werden....
und wenn Student oder Person zum Beispiel keine Matrikelnummer anbieten dann wird "" (String ohne Inhalt) oder null von TRow für TCol zurück-gegeben.
ListOfPerson hält einfach eine Liste mit Personen....
Danke dir sehr!
hat jetzt alles geklappt

Danke euch beiden für eure Mühen! 😀 !!!!!!!
endlich fertig
Auf zum nächsten Abenteuer
 
Die Frage an sich ist gut, auch die "Präsentation" der Frage. Mit der Fragestellung selbst habe ich eher meine Probleme.

Zum Thema: evtl. sollte man etwas wie eine MultiCellValueFactory einführen, um eine ähnliche Funktionalität wie JTable#setDefaultRenderer zu erhalten.
 
Ich habe es jetzt mal so gemacht:
(Daten 1)
Java:
abstract class APerson {
    abstract TRow getTRow();
}

class Person extends APerson {
    private final String nname;
    private final String vname;

    Person(String nname, String vname) {
        this.nname = nname;
        this.vname = vname;
    }

    @Override
    TRow getTRow() {
        return new TRow(new TCol[]{
            new TCol(nname),
            new TCol(vname),
            new TCol("Person keine MN"),
            new TCol("Person kein NC"),
            new TCol("Person keine WS"),});
    }
}

class Student extends Person {
    private final String matrikeln;
    private final String nc;

    Student(String nname, String vname, String matrikeln, String nc) {
        super(nname, vname);
        this.matrikeln = matrikeln;
        this.nc = nc;
    }

    @Override
    TRow getTRow() {
        TRow tRow = super.getTRow();
        return new TRow(new TCol[]{
            tRow.getTCol(0),
            tRow.getTCol(1),
            new TCol(matrikeln),
            new TCol(nc),
            new TCol("Student keine WS"),});
    }
}

class SMitarbeiter extends Student {
    private final int wochens;

    SMitarbeiter(String nname, String vname, String matrikeln, String nc, int wochens) {
        super(nname, vname, matrikeln, nc);
        this.wochens = wochens;
    }

    @Override
    TRow getTRow() {
        TRow tRow = super.getTRow();
        return new TRow(new TCol[]{
            tRow.getTCol(0),
            tRow.getTCol(1),
            tRow.getTCol(2),
            tRow.getTCol(3),
            new TCol(((Integer) wochens).toString()),});
    }
}

mit (Daten 2)
Java:
class TCol {
    private final String s;

    TCol(String s) {
        this.s = s;
    }

    String getString() {
        return s;
    }
}

class TRow {
    private final TCol[] tc;

    TRow(TCol[] tc) {
        this.tc = tc;
    }

    TCol getTCol(int x) {
        return tc[x];
    }
}

mit ("Oberfläche")
Java:
class ListOfPersons {
    public static void main(String[] args) {
        ListOfPersons listOfPersons = new ListOfPersons(new Person[]{
          
            new Student("fällt keiner", "ein1", "123", "1.23"),
            new Student("fällt keiner", "ein2", "321", "3.21"),
            new SMitarbeiter("fällt keiner", "ein3", "213", "3.21", 40),
            new Person("Hausmeister", "schlau"),
      
        });
        JFrame f = new JFrame();
        JTable t = new JTable(new AbstractTableModel() {
            @Override
            public String getColumnName(int column) {
                String[] s = {"Nachname", "Vorname", "Matrikeln", "NC", "WS"};
                return s[column];
            }

            @Override
            public Class<?> getColumnClass(int columnIndex) {
                return String.class;
            }
          
            @Override
            public int getRowCount() {
                return listOfPersons.getPersons().size();
            }

            @Override
            public int getColumnCount() {
                return 5;
            }

            @Override
            public Object getValueAt(int rowIndex, int columnIndex) {
                return listOfPersons.getPersons().get(rowIndex).getTRow().getTCol(columnIndex).getString();
            }
        });
      
        f.getContentPane().add(new JScrollPane(t));
        f.setSize(800, 200);
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    private final List<APerson> persons;

    ListOfPersons(APerson[] p) {
        persons = Arrays.asList(p);
    }

    List<APerson> getPersons() {
        return persons;
    }
}

. @mrBrown , die Zuständigkeiten sind getrennt, so stimmt das.

Oberfläche:

Unbenannt9.PNG
 
@mrBrown Was du als " Bullshit " bezeichnest, ist die hiernach gefragte Vererbung....

Wie immer gilt: Liefere ein valides Gegenargument - oder bezeichne Anderes nicht als Bullshit....

Du willst doch vielleicht mal in der SE tätigk werden - oder sogar ein Projekt leiten.... Dabei hast du noch viel an Deinem Verhalten zu ändern - sofern alle dich nicht mögen sollen.
 
@mrBrown Was du als " Bullshit " bezeichnest, ist die hiernach gefragte Vererbung....
Nein.
Die Vererbung ist okay. Bullshit ist es, die Darstellung in die Domäne hineinzuziehen (das genaue Gegenteil von "Zuständigkeiten sind getrennt") und es dabei erforderlich zu machen, dass alle Klassen die Attribute aller anderen Klassen kennen.

Wie immer gilt: Liefere ein valides Gegenargument - oder bezeichne Anderes nicht als Bullshit....
Hab ich, mehrfach, du müsstest nur lesen und verstehen. Im Gegensatz zu dir kann ich meine Aussagen begründen.
 
Person, Student und SMitarbeiter müssen zumindest wissen (ein Attribut haben), an ab welcher Position sie (ihre Attribute) in einer Zeile eingefügt werden müssen. Eine scharfe Trennung ist das auch nicht....
 
Person, Student und SMitarbeiter müssen zumindest wissen (ein Attribut haben)
Sie müssen auch wissen, welche Werte aus allen anderen Klassen angezeigt werden, um Platzhalter darzustellen -> Starke (aber nicht mal vom Compiler prüfbare) Kopplung zwischen allen Klassen der Hierarchie.

an ab welcher Position sie (ihre Attribute) in einer Zeile eingefügt werden müssen
Eben, die Klassen müssen wissen, wie sie dargestellt werden -> Starke Kopplung von Domäne an View.
Und daraus folgend: keine Möglichkeit, die View anzupassen. Nicht mal möglich, die Tabellenspalten umzusortieren.
 
Ich dachte eher an so was (ungetestet):

Java:
import java.util.HashMap;
import java.util.Map;

import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.util.Callback;

public class MultiCellValueFactory<S,T> implements Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>> {
    private final Map<Class<? extends S>, Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>>> factories =
        new HashMap<>();

    public void setCellValueFactory(Class<? extends S> clazz, Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>> factory) {
        factories.put(clazz, factory);
    }

    @Override
    public ObservableValue<T> call(CellDataFeatures<S,T> data) {
        if (data.getValue() != null) {
            Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>> cb =
                factories.get(data.getValue().getClass());
            if (cb != null) {
                return cb.call(data);
            }
        }
        return null;
    } 
}

Und dann
Java:
MultiCellValueFactory<Person,String> mcvf = new MultiCellValueFactory<Person,String>();
mcvf.setCellValueFactory(Student.class, data -> return new SimpleStringProperty("Keine WS"));
mcvf.setCellValueFactory(SMitarbeiter.class, data -> return new SimpleStringProperty(((SMitarbeiter) data.getValue()).getWochenstunden().toString()));
...
col4.setCellValueFactory(mcvf);
 
Die Vererbung hast Du in den Domänenklassen Person, Student, SMitarbeiter. Die steckst Du nach belieben in die ListOfPerson. MultiCellValueFactory ersetzt das statische "instanceof" durch eine dynamische Map. Durch
mcvf.setCellValueFactory(SMitarbeiter.class, f);
kann man in f sicher sein, dass data.getValue() auf SMitarbeiter gecastet werden kann 🙂
 
mcvf.setCellValueFactory(Student.class, data -> return new SimpleStringProperty("Keine WS"));
Das Problem ist einfach dass mcvf/CellValueFactory einfach eine cast-Fallunterscheidung durchführt und damit das Liskovsche' Substitutionsprinzip nicht einhält. (eines der SOLID-Prinzipien ....)

damit könnte man sich die Vererbung ja gleich "schenken"....

Nebenbei, Wem langweilig ist, der kann hier mal lesen: https://softwareengineering.stackex...-you-explain-separation-of-concerns-to-others

Stellst du dich extra so dumm?
nein, denke schon auch nach. 🙄
 
Ähm, das heißt, falls ihn nicht alle nicht mögen sollen, soll er sein Verhalten beibehalten? Warum sollte er denn wollen, dass ihn alle nicht mögen sollen?
Der letzte Halbsatz
sofern alle dich nicht mögen sollen.
war logisch nicht richtig. 🙄

Aber es ist witzig dachte fällt gar niemandem auf.
Was/warum kommst du aufeinmal um die Ecke , @Meniskusschaden ?

Fix:
Du willst doch vielleicht mal in der SE tätigk werden - oder sogar ein Projekt leiten.... Dabei hast du noch viel an Deinem Verhalten zu ändern - sofern alle zumindest einer dich nicht mögen soll en.
 
public void setCellValueFactory(Class<? extends S> clazz, Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>> factory)

clazz ist vom Typ S oder einem davon abgeleiteten Typ.
 

Neue Themen


Zurück
Oben