removeRow führt keine Aktion aus

dastool

Erfahrenes Mitglied
Servus,
ich möchte via einer For-Schleife die vorhanden Zeilen meiner Tabelle löschen.
Dazu hab ich folgenden Code geschrieben:
Java:
int rowcount = table.getRowCount();
                System.out.println("rowcount vor schleife: "+rowcount);
                int forint;
                
                for(forint=0;forint>=rowcount;forint++){
                    
                defTM.removeRow(forint);
                rowcount = table.getRowCount();
                System.out.println("in der schleife: "+rowcount);}

Aber egal wieviele rows ich durch auslesen meiner DB erhalte, es werden nur bis maximal 2 Rows hochgezählt aber keine entfernt.
Was hab ich nun wiedermal falsch gemacht ?
 
Zuletzt bearbeitet:
Moin!
Eine while Schleife würde sicher besser passen:
Code:
while(table.getRowCount() > 0){
defTMRemoveRow(0);
}


Falls der Fehler dadurch nicht behoben ist:
getRowCount() wird an das TableModel weitergeleitet.
Höchstwahrscheinlich gibt dieses die falsche Anzahl an Zeilen zurück. Hast du ein eigenes Model ,bzw das bestehende geändert?

*grüssle*
MeinerEiner
 
Gute Frage :confused:

Ich poste am beste mal den relevanten teil ( Nacht war lange und der Code ist es auch ^^)

Java:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.util.Vector;

public class Main extends JFrame implements ActionListener, TableModelListener{
    
    private JButton bSuchen, bAendern;
    private JComboBox jbSuchen;
    private JLabel jLabel3;
    private JScrollPane jScrollPane1;
    private JSeparator jSeparator1;
    private JTable table;
    private JTextField jtfName, jtSuchen;
    private DefaultTableModel defTM;
    private int h,j;
    private Object obj;
    
    public final static Vector COLUMN_IDENTIFIERS = new Vector() {
        {
            add("IDTicket");
            add("Person");
            add("Abteilung");
            add("Telefon");
            add("Email");
            add("Hardware");
            add("Software");
            add("SWProblem");
            add("Dringlichkeit");
            add("Status");
        }
    };
~~~~
        defTM = new DefaultTableModel(1,0);
        defTM.setColumnIdentifiers(COLUMN_IDENTIFIERS);
        table = new JTable(defTM);
~~~~
if ("Suchen".equals(e.getActionCommand())){
            sql = "select * from `ticket` where"+jb+"="+suchText+" order by dringlichkeit;";
            try {
                String driver = "com.mysql.jdbc.Driver";
                String url = "";
                
                try {
                    url = lesen();
                } catch( FileNotFoundException eof ) {
                    String ticketnr = "Datei nicht gefunden, \n" +
                            "bitte Informieren Sie ihren Administrator";
                    JDialog d1 = new JDialog();
                    JLabel nummer = new JLabel();
                    nummer.setText(ticketnr);
                    d1.add(nummer);
                }
                Class.forName(driver);
                Connection con;
                con = DriverManager.getConnection(url, user, pw);
                Statement stmt = con.createStatement();
                rs = stmt.executeQuery(sql);
                int rowcount = table.getRowCount();
                System.out.println("rowcount vor schleife: "+rowcount);
                int forint;
                for(forint=0;forint>=rowcount;forint++){
                    
                defTM.removeRow(forint);
                rowcount = table.getRowCount();
                System.out.println("in der schleife: "+rowcount);}
                
                while (rs.next()){
                    
                    
                    
                    
                    defTM.addRow( new Object[]{rs.getString("IDTicket"),rs.getString("Person"),rs.getString("Abteilung"),rs.getString("Telefon"),rs.getString("Email"),rs.getString("Hardware"),rs.getString("Software"),rs.getString("SWProblem"),rs.getString("Dringlichkeit"),rs.getString("Status")});
                    
                }
                
                rs.close();
                stmt.close();
                con.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
            //defTM.addRow( new Object[]{});
            
        }
 
Zuletzt bearbeitet:
Nun am TableModel wirds wohl nicht liegen..
Ich glaube zwar nicht, das die Zeilenenzahl statisch ist, aber erstelle mal dein Model mit
Code:
defTm = new DefaultTableModel();

Hast du die while Schleife mal ausprobiert? Denn deine for-Schleife sieht mir nicht sehr koscher aus...

*grüssle*
MeinerEiner
 
In der While-Schleife werden ja die ResulSets in die Tabelle eingetragen, da sollte der "Löschvorgang" ja schon beendet sien ;-)

das mit

Code:
defTM = new DefaultTableModel(1,0);

ist ja absicht damit, fals notwendig, ein Eintrag in die DB gemacht werden kann.
Nur, sobald eine neue Suche gestartet wird, soll ja die Tabelle gellert und die neuen Daten angezeigt werden.
Es funktioniert ja alles, bis auf das "Leeren" der Tabelle.
Hab hier auch was gefunden mit der funktion
Code:
.updateUI
aber da klappt genausoviel :-(
 
Ich habe nicht deine while Schleife gemeint...
Statt:
  1. int rowcount = table.getRowCount();
  2. System.out.println("rowcount vor schleife: "+rowcount);
  3. int forint;
  4. for(forint=0;forint>=rowcount;forint++){
  5. defTM.removeRow(forint);
  6. rowcount = table.getRowCount();
  7. System.out.println("in der schleife: "+rowcount);}
sollst du
Eine while Schleife würde sicher besser passen:
Code:
while(table.getRowCount() > 0){
defTMRemoveRow(0);
}

nutzen...
 
Zurück