Markierte Zeile löschen AbstractTableModel

Hades

Mitglied
Hallo zusammen,

ich habe ein Problem und zwar wie kann ich im AbstractTableModel makierte Zeilen löschen.
Versucht habe ich es schon mit dieser Variante:

Java:
public void removeRow(JTable table) {
    	DefaultTableModel tm = (DefaultTableModel) table.getModel();
    	int[] rows = table.getSelectedRows();
    	
    	for(int i = 0; i < rows.length; i++) {
    		tm.removeRow(table.getSelectedRow());
    	}	
    }
, aber dann bekomme ich als Fehlermeldung nur diese Nachricht:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Table cannot be cast to javax.swing.table.DefaultTableModel
at Frame.removeRow(Frame.java:355)
at Frame.actionPerformed(Frame.java:350)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)



Ich weiß gerade echt nicht mehr weiter, wäre echt super wenn mir einer helfen könnte.
Vielen Dank schon mal im voraus.
 
G

Gast2

Gast
Ja dein Model ist keine Instanz vom DefaultTableModel...
Die Fehlermeldung sagt doch alles.
 

Hades

Mitglied
Mhm... dann muss ich anders fragen.

Welche Alternative bietet mir das AbstractTableModel?

Diese ?
void fireTableRowsDeleted(int firstRow, int lastRow)
Notifies all listeners that rows in the range [firstRow, lastRow], inclusive, have been deleted.
 
G

Gast2

Gast
Gar keins kommt auf dein eigenes Model an ich weiß ja nicht wie das aussieht...
Du musst ja irgendeine erbenden Klasse haben...
 
S

SlaterB

Gast
wenn der JTable-Konstruktor [c]JTable(final Object[][] rowData, final Object[] columnNames)[/c]
benutzt wurde, dann wird intern eben kein DefaultTableModel verwendet,
bei den anderen Konstruktoren schon
 

Hades

Mitglied
Ich habe echt ein bisschen zu kompliziert gedacht.
Java:
	public void delete(int rowIndex) {
		
		if(rowIndex < 0) {
			return;
		}
		
		getFiles.remove(rowIndex);
		this.fireTableRowsDeleted(rowIndex, rowIndex);
		
	}

Jetzt habe ich nur das Problem das zwar die Zeile gelöscht wird, aber die Aktualisierung erst mit einem klick auf die Tabelle angezeigt wird.
 
S

SlaterB

Gast
das DefaultTableModel machts genauso und da klappt für jedermann,

eine Ursache dafür kann man sich kaum ausdenken, vielleicht hilft mehr geposteter Code,
idealerweise ein kurzes vollständiges Testprogramm
 

Hades

Mitglied
Java:
import java.util.Vector;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

/**
 * 
 */

/**
 * @author
 *
 */
public class Table extends AbstractTableModel {
	

	private Vector<ClassFile> getFiles = new Vector<ClassFile>();
	private Vector<TableModelListener> tableListener = new Vector<TableModelListener>();
	
	
	/**
	 * 
	 */
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return 6;
	}
	
	/**
	 * 
	 */
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return getFiles.size();
	}

	/**
	 * 
	 */
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		ClassFile file = (ClassFile)getFiles.get(rowIndex);
		
		switch(columnIndex) {
			case 0:
				return  rowIndex + 1;
			case 1:
				return file.getName();
			case 2:
				return file.getExt();
			case 3:
				return file.getSize();
			case 4:
				return file.getDate();
			case 5:
				return file.isCanRead();
			default:
				return null;
		}	
	}
	
	/**
	 * 
	 */
	public String getColumnName(int columnIndex) {
		switch(columnIndex) {
			case 0:
				return "Row #";
			case 1:
				return "Name";
			case 2:
				return "Endung";
			case 3:
				return "Größe in KB";
			case 4:
				return "Datum";
			case 5:
				return "Schreibzugriff";
			default:
				return null;
		}
	}
	
	/**
	 *
	 */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return false;
	}
	
	
	@Override
	public void addTableModelListener(TableModelListener l) {
		// TODO Auto-generated method stub
		tableListener.add(l);
	}
	
	
	@Override
	public void removeTableModelListener(TableModelListener l) {
		// TODO Auto-generated method stub
		tableListener.add(l);
	}

	/**
	 * 
	 * @param 
	 */
	public void addFiles(ClassFile file) {
		int index = getFiles.size();
		getFiles.add(file);
		
		TableModelEvent event = new TableModelEvent(this, index, index,
				TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
		
		for(int i = 0, n = tableListener.size(); i < n; i++) {
			((TableModelListener)tableListener.get(i)).tableChanged(event);
		}
	}
	
	/**
	 * 
	 * @param
	 */
	public void delete(int rowIndex) {
		
		if(rowIndex < 0) {
			return;
		}
		
		getFiles.remove(rowIndex);
		this.fireTableRowsDeleted(rowIndex, rowIndex);
	}
}

das ist mein TableModel.
 
S

SlaterB

Gast
alles zu TableModelListener musst du entfernen, das AbstractTableModel kümmert sich darum
bzw. informiert in seinen fire-Methoden auch nur die dort gespeicherten Listener, im Moment keine weil dein Model das addTableModelListener() abfängt,
wenn dann müsstest du dich auch um die Events kümmern, aber unnötig, alles dazu dem AbstractTableModel überlassen

edit: bei add() hast die Events ja richtig selber gemacht, so kompliziert auf bei remove,
oder Listener weg, überall fireXy() benutzen, auch beim add()

im Extremfall ist auch denkbar in addTableModelListener() einen super-Aufruf einzufügen, damit die Listener von beiden verwaltet werden, bei removeTableModelListener() dann auch, na nicht so schön
 
Zuletzt bearbeitet von einem Moderator:

Hades

Mitglied
So jetzt habe ich es funktioniert jetzt einwandfrei.
Java:
public void delete(int rowIndex) {
        
        if(rowIndex < 0) {
            return;
        }
        
        getFiles.remove(rowIndex);
        this.fireTableRowsDeleted(rowIndex, rowIndex);
        
        TableModelEvent event = new TableModelEvent(this, rowIndex, rowIndex,
                TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE);
        
        for(int i = 0, n = tableListener.size(); i < n; i++) {
            ((TableModelListener)tableListener.get(i)).tableChanged(event);
        }
    }

nochmals vielen Dank für die Denkanstöße.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
C JTable markierte Zelle wird bei removeRow nicht mit gelöscht AWT, Swing, JavaFX & SWT 6
Q markierte mails löschen AWT, Swing, JavaFX & SWT 5
G Markierte MenüItems des JCombobox - Popups ausgeben AWT, Swing, JavaFX & SWT 7
J Markierte Zeilen in einem JTable AWT, Swing, JavaFX & SWT 3
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
F Zeile in mehreren Jtables bei Selektion markieren AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableRow / RowFactory Zeile einfärben AWT, Swing, JavaFX & SWT 9
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
M TableView Zeile hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
C SWT Breadcrumb Zeile mit entsprechenden Hyperlinks erstellen AWT, Swing, JavaFX & SWT 0
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
J Swing JTable Zeile nicht auswählbar machen AWT, Swing, JavaFX & SWT 0
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
S JTable nach aktualisierung - neue Zeile nicht "klickbar" AWT, Swing, JavaFX & SWT 0
D Swing Letzte Zeile einer JTable nicht über RowSorter sotieren AWT, Swing, JavaFX & SWT 2
M Text Area 1. Zeile oben AWT, Swing, JavaFX & SWT 4
I ausgewählte Zeile mit Hilfe der Tastatur löschen! AWT, Swing, JavaFX & SWT 3
B jTable ganze Zeile anhand eines Kriterium färben AWT, Swing, JavaFX & SWT 6
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
Ollek Swing JTable - Zeile löschen mit AbstractTableModel AWT, Swing, JavaFX & SWT 20
S Swing Kopieren einer vollständigen Zeile einer JTable AWT, Swing, JavaFX & SWT 3
F GroupableTableHeader zeigt nur eine Zeile AWT, Swing, JavaFX & SWT 4
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
N Swing FileReader Zeile lesen AWT, Swing, JavaFX & SWT 5
C SWT Wie greife ich auf den Inhalt einer bestimmten Zeile zu? (TableViewer) AWT, Swing, JavaFX & SWT 7
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
K Zeile verbinden AWT, Swing, JavaFX & SWT 2
G Zeile in JTable durch rechte Maustaste manipulieren AWT, Swing, JavaFX & SWT 4
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
P Aktuelle Zeile in JTextPane farblich hervorheben AWT, Swing, JavaFX & SWT 3
H Swing JComboBox in einer Zeile AWT, Swing, JavaFX & SWT 3
Meldanor Swing JTable - Eine neue Zeile vor einer bestehenden Einfügen AWT, Swing, JavaFX & SWT 2
F Zusätzliche Zeile in der GUI AWT, Swing, JavaFX & SWT 4
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
R Zeile in JTable anhand von Wert einfärben AWT, Swing, JavaFX & SWT 2
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
N JTable, Zeile bleibt immer selektiert.... AWT, Swing, JavaFX & SWT 3
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
J Swing JList... mehrere Strings in Zeile AWT, Swing, JavaFX & SWT 8
N Methode zum ermitteln der editierte Zeile/Zelle in jTable AWT, Swing, JavaFX & SWT 8
C Mit SelectionListener herausfinden welche zeile in Jtable angeklickt wurde AWT, Swing, JavaFX & SWT 5
E In JTable neue Zeile mit Tabulator einfügen AWT, Swing, JavaFX & SWT 5
M Text in txt-Datei in letzte Zeile schreiben? AWT, Swing, JavaFX & SWT 14
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
Developer_X Swing text von bestimmter zeile in jtextarea herausbekommen. AWT, Swing, JavaFX & SWT 12
R JTable Zeile löschen AWT, Swing, JavaFX & SWT 4
T MyTableCellRenderer selektiert nicht die ganze Zeile AWT, Swing, JavaFX & SWT 3
R FlowLayout: 1 Objekt pro Zeile AWT, Swing, JavaFX & SWT 5
D eigenes Tablemodel, Zeile löschen ArrayindexOOB excp AWT, Swing, JavaFX & SWT 4
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
P JTable zeile einfärben AWT, Swing, JavaFX & SWT 1
N Farbe einer einzelnen Zeile einer JTable ändern AWT, Swing, JavaFX & SWT 10
G Componente Zeile fixieren AWT, Swing, JavaFX & SWT 3
dl85hej bestimmte Zeile anspringen AWT, Swing, JavaFX & SWT 3
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
R JTable: Zellen einer Zeile zusammenfassen? AWT, Swing, JavaFX & SWT 3
D JTable um eine Zeile erweitern AWT, Swing, JavaFX & SWT 4
P Tabellen in Java - Zeile anhängen AWT, Swing, JavaFX & SWT 19
GilbertGrape JTable - immer leere Zeile AWT, Swing, JavaFX & SWT 6
A JTable zeile auswählen AWT, Swing, JavaFX & SWT 2
A JXTable jede zweite Zeile einfärben AWT, Swing, JavaFX & SWT 4
S in JTable eine Zeile färben AWT, Swing, JavaFX & SWT 5
T JTable ohne Titel in der ersten Zeile AWT, Swing, JavaFX & SWT 2
K leere Zeile zu JTable zufügen AWT, Swing, JavaFX & SWT 2
T jtabel - Zeile selktierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 2
E JTable letzte Zeile in Fett schrift? AWT, Swing, JavaFX & SWT 3
O JTable + event wenn andere Zeile selektiert ist AWT, Swing, JavaFX & SWT 5
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
O JTable Zeile zuweisen und weiter mit dem Button AWT, Swing, JavaFX & SWT 2
M JTable & Problem, das nicht die komplette Zeile gefärbt AWT, Swing, JavaFX & SWT 6
G JTable erste zeile fixieren wie in excel? AWT, Swing, JavaFX & SWT 3
Z JTable automatisch zu einer Zeile scrollen AWT, Swing, JavaFX & SWT 4
lolkind eine Zeile und Tabelle ist Rechtsbündig? AWT, Swing, JavaFX & SWT 3
G JTable Zeile zurückgeben AWT, Swing, JavaFX & SWT 4
D Herausfinden auf welche Zeile in einer JTable geklickt wurde AWT, Swing, JavaFX & SWT 2
F JTextPane aktive Zeile AWT, Swing, JavaFX & SWT 2
S JTable: Zeile unter MouseCursor farblich hervorheben AWT, Swing, JavaFX & SWT 2
N Trotz richtiger ListSelectionMode kann ich keine Zeile sel? AWT, Swing, JavaFX & SWT 4
N Die Zeile einer JTable verändert beim klicken ihre Farbe? AWT, Swing, JavaFX & SWT 7
S Eine Zeile zu einer JTable hinzufügen wo Zelle selektiert is AWT, Swing, JavaFX & SWT 4
A Prob:Tabelle bei Zellensprung: Letzte zeile doppelt sichtbar AWT, Swing, JavaFX & SWT 7
G JTable Zeile mit Farbe füllen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben