Erste Schritte JTable kann nicht in CSV gespeichert werden

XSlippy666

Mitglied
Guten Tag liebe Community,
ich habe folgendes Problem:

Ich schreibe seit einiger Zeit an einer Art Organizer. Im GUI des Organizers erzeuge ich ganz simpel eine JTable in der Alle Termine angezeigt werden! Die Tabelle selbst ist editierbar, damit man gegebenenfalls Termine abändern kann. Zusätzlich habe ich einen Button ins GUI programmiert, der die Änderung der Events bestätigt und die komplette Tabelle zurück in eine CSV datei speichert.

So weit so gut. Wenn ich eine Zelle in der Tabelle leer lasse, dass wird der Fehler per Exception abgefangen! Wenn ich jedoch nur ein mal ins leer gelassene Fald hineinklicke und gar nichts hineinschreibe, dann wird der Fehler nicht mehr abgefangen und die Tabelle wird geschrieben! Das
darf nicht geschehen!!! Was mache ich hier beim abfangen des Fehlers falsch??? Bitte helft mir :

Java:
try{
    
    
                         
     for(int row=0;row<table4.getRowCount();row++){
         
         
         table4.clearSelection();
         
         
         try{  
         if((table4.getValueAt(row,0).toString()).trim()==null){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 1]  in der Tabelle muss beschrieben werden!"  );
         }
         }
         catch(Exception col1){
              master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 1]  in der Tabelle muss beschrieben werden!"  );
         }
         
         
         try{
         if((table4.getValueAt(row,1).toString()).trim()==null){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 2]  in der Tabelle muss beschrieben werden!" );
         }
         }
         catch(Exception col2){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 2]  in der Tabelle muss beschrieben werden!"  );
         }
         
         
         try{
         if((table4.getValueAt(row,2).toString()).trim()==null){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 3]  in der Tabelle muss beschrieben werden!"  );
         }
         }
         catch(Exception col3){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 3]  in der Tabelle muss beschrieben werden!"  );
         }
         
         
         
         try{
         if((table4.getValueAt(row,3).toString()).trim()==null){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 4]  in der Tabelle muss beschrieben werden!"  );
         }
         }
         catch(Exception col4){
              master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 4]  in der Tabelle muss beschrieben werden!"  );
         }
         
         
         
         try{
         if((table4.getValueAt(row,4).toString()).trim()==null){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 5]  in der Tabelle muss beschrieben werden!" );
         }
         }
         catch(Exception col5){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 5]  in der Tabelle muss beschrieben werden!"  );
         }
         
         
         
         try{
         if((table4.getValueAt(row,5).toString()).trim()==null){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 6]  in der Tabelle muss beschrieben werden!"  );
         }
         }
         catch(Exception col6){
             master = false;
             JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Zeile 6]  in der Tabelle muss beschrieben werden!"  );
         }
         
         
         
         System.out.println("f4");
         
    }
}
catch(Exception val2){
    JOptionPane.showMessageDialog(null, "Manche Felder in der Tabelle sind leer!");
    master=false;
}
 
das sieht aus als könnte man das schöner schreiben!?

Java:
try{                 
    table4.clearSelection();
        
    for(int row=0;row<table4.getRowCount(); row++) {
        for (int col=0; col<table4.getColCount(); col++) {
            try{  
                if ((table4.getValueAt(row,col).toString()).trim()==null) {
                    master = false;
                    JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Spalte " + (col+1) + "]  in der Tabelle muss beschrieben werden!"  );
                }
            } catch(Exception e) {
                master = false;
                JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Spalte " + (col+1) + "]  in der Tabelle muss beschrieben werden!"  );
            }//try
        }//for col
    }//for row
} catch(Exception val2){
    master=false;
    JOptionPane.showMessageDialog(null, "Manche Felder in der Tabelle sind leer!");
}//try

nun statt
Code:
if ((table4.getValueAt(row,col).toString()).trim()==null) {
vielleicht noch auf leeren String prüfen?!

Java:
//ohne gewähr, nur so hingeschrieben! Try-Catch koennte dann vielleicht wegfallen
String value = table4.getValueAt(row,0);
if ((value == null) || (value.toString().trim().length == 0)) {
    master = false;
    JOptionPane.showMessageDialog(null, "[Reihe " + (row+1) + "/ Spalte " + (col+1) + "]  in der Tabelle muss beschrieben werden!"  );
}
 
Zuletzt bearbeitet:
Erstmal tut es mir leid, dass mein quelltext so unordentlich ist...
Danke für die schnelle Antwort. Ich probiere das jetzt mal aus und antworte danach ok ?
Vielen Vielen Dank!
 
Java:
final String cellValue = table4.getValueAt(row,2).toString()).trim();
if (cellValue == null || cellValue.isEmpty()) {
  throw new IllegalArgumentException("Wert darf weder null noch leer sein");
}
Du musst also nach der Überprüfung auf null noch die Überprüfung auf leere Strings einbauen (seit Java 6 isEmpty(), davor length()<1).
 
Ja ist jetzt nur so hingehackt, eventuell nich perfekt ^^ .. aber du hast viel Redundanz drin, die man in dem Fall mit einer zweiten Schleifen für die Spalten los wird. Im Prinzip möchtest du, bei leerem Inhalt ne Info ausgeben, die besagt, dass man noch etwas eintragen möge?! Das sollte damit erstmal erhalten bleiben, hat aber mit dem Problem des Speicherns nichts weiter zu tun. Es kann sein, dass bei einem Klick auf die Zelle und keinem Eintrag selbst der leere String ("") hineingeschrieben wird, daher ist der Inhalt nicht mehr null!
 
Das mit der zweiten schleife klappt leider nicht... die idee ist mir auch schon gekommen aber
ich muss die letzten 3 spalten Tag/Monat/Jahr auch auf den integer wert prüfen und darauf, dass die eingabe >0 usw ist.

Jedenfalls vielen Dank! Du bist Balsam für jeden Java Anfänger!
 
naja kommt drauf an bis wohin die 2. Schleife läuft, wenn du die letzten 3 Spalten extra behandeln möchtest, dann lass die 2. Schleife doch entsprechend früher aufhören. Ist allemal besser als der Code vom ersten Post ^^
 

Zurück
Oben