Zeile aus Tabelle zur Laufzeit löschen

Status
Nicht offen für weitere Antworten.

Conn

Aktives Mitglied
Hallo,
such nach einer Möglichkeit aus meiner Tabelle JTable tabelle; zur Laufzeit eine Zeile zu löschen. Die anderen Zeilen sollen entsprechend nachrücken.

Habe gelesen es gebe eine removeRow() Methode. Nur bietet mein JTable Objekt komischerweise diese Methode nicht an. Was muss ich ändern?!
 
S

SlaterB

Gast
wenn du eine Standardtabelle hast, dann geht

((DefaultTableModel) table.getModel()).removeRow(5);
 

Conn

Aktives Mitglied
Erst einmal vielen Dank.
Nur leider kommt folgende Exception.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JTable$1 cannot be cast to javax.swing.table.DefaultTableModel
 
S

SlaterB

Gast
tja, da stellt sich die Frage, welches Model du verwendest, oder welchen Konstruktor von JTable

Code:
    /**
     * Constructs a <code>JTable</code> with <code>numRows</code>
     * and <code>numColumns</code> of empty cells using
     * <code>DefaultTableModel</code>.  The columns will have
     * names of the form "A", "B", "C", etc.
     *
     * @param numRows           the number of rows the table holds
     * @param numColumns        the number of columns the table holds
     * @see javax.swing.table.DefaultTableModel
     */
    public JTable(int numRows, int numColumns) {
        this(new DefaultTableModel(numRows, numColumns));
    }

    /**
     * Constructs a <code>JTable</code> to display the values in the
     * <code>Vector</code> of <code>Vectors</code>, <code>rowData</code>,
     * with column names, <code>columnNames</code>.  The
     * <code>Vectors</code> contained in <code>rowData</code>
     * should contain the values for that row. In other words,
     * the value of the cell at row 1, column 5 can be obtained
     * with the following code:
     * 


     * <pre>((Vector)rowData.elementAt(1)).elementAt(5);</pre>
     * 


     * @param rowData           the data for the new table
     * @param columnNames       names of each column
     */
    public JTable(Vector rowData, Vector columnNames) {
        this(new DefaultTableModel(rowData, columnNames));
    }

    /**
     * Constructs a <code>JTable</code> to display the values in the two dimensional array,
     * <code>rowData</code>, with column names, <code>columnNames</code>.
     * <code>rowData</code> is an array of rows, so the value of the cell at row 1,
     * column 5 can be obtained with the following code:
     * 


     * <pre> rowData[1][5]; </pre>
     * 


     * All rows must be of the same length as <code>columnNames</code>.
     * 


     * @param rowData           the data for the new table
     * @param columnNames       names of each column
     */
    public JTable(final Object[][] rowData, final Object[] columnNames) {
        this(new AbstractTableModel() {
            public String getColumnName(int column) { return columnNames[column].toString(); }
            public int getRowCount() { return rowData.length; }
            public int getColumnCount() { return columnNames.length; }
            public Object getValueAt(int row, int col) { return rowData[row][col]; }
            public boolean isCellEditable(int row, int column) { return true; }
            public void setValueAt(Object value, int row, int col) {
                rowData[row][col] = value;
                fireTableCellUpdated(row, col);
            }
        });
    }

die ersten beiden sind gut, der dritte schlecht ;)

ganz auf Nummer sicher gehts du, wenn du selber das Model festlegst:
DefaultTableModel model = ..;
JTable table = new JTable(model);
 

Conn

Aktives Mitglied
Hatte zwischenzeitlich schon ein AbtractTableModel angelegt und die Daten werden auch ordnungsgemäß in die Tabelle eingelesen.
Hier ein Auszug.
Code:
tableModel = new QuizTableModel(raetsel, tabellenKopf);
        this.tabelle = new JTable(tableModel, null);
        
        
        
        this.tabelle.setRowSelectionAllowed(true);
        this.tabelle.getSelectionModel().addListSelectionListener(this);
        this.tabelle.setBorder(BorderFactory.createEtchedBorder());
        cp.add(this.tabelle, BorderLayout.CENTER);
        cp.add(new JScrollPane(this.tabelle), BorderLayout.CENTER);

Hier die Klasse QuizTableModell.java
Code:
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;


public class QuizTableModel 
extends AbstractTableModel
{
    
    private Object[][] rowData;
    private Object[] columnNames;
    
    
    public QuizTableModel(Object[][] rowData, Object[] columnNames) {
    this.rowData = rowData;
    this.columnNames = columnNames;
    }

    public int getRowCount() {
        return rowData.length;
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
     return this.rowData[rowIndex][columnIndex];   
    }
    public String getColumnName(int columnIndex) {
        return (String) this.columnNames[columnIndex];
    }
    
}

Möchte nun über einen EventListener einfach nur eine Zeile löschen oder eine hinzufügen.
Soll irgendwie über fireTableDataChanged() funktionieren.
Kann mir jemand an einem einfachen Beispiel erklären, wie das funktioniert und vielleicht in dem Zusammenhang diesen Abschnitt aus dem oberen Beispiel:
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
 
S

SlaterB

Gast
dann klauen wir mal aus DefaultTableModel

Code:
  /**
     * The <code>Vector</code> of <code>Vectors</code> of 
     * <code>Object</code> values.
     */
    protected Vector    dataVector;

   /**
     *  Removes the row at <code>row</code> from the model.  Notification
     *  of the row being removed will be sent to all the listeners.
     *
     * @param   row      the row index of the row to be removed
     * @exception  ArrayIndexOutOfBoundsException  if the row was invalid
     */
    public void removeRow(int row) {
        dataVector.removeElementAt(row);
        fireTableRowsDeleted(row, row);
    }
in deinem Fall wirds schwieriger, das Array zu kürzen..
am besten neues Array und Inhalt kopieren,

oder gleich DefaultTableModel verwenden/ nachbauen/ davon erben,
statt Vector besser mit ArrayList arbeiten,
aber ansonsten ist es ja nur die grundsätzliche Frage Array oder Liste

--------

und was gibts da groß zu erklären?
AbstractTableModel organisiert das Informieren der Listener, insbesondere der anzeigenden JTable!

da bei verschiedenen Änderungen verschiedene Dinge zu tun sind gibts da ne Menge an spezifischen Events,
fireTableCellUpdated() heißt, dass nur ein Wert geändert wurde,
fireTableRowsDeleted() handelt vom Löschen,

wenn man gar alle Daten neu setzt oder neue Spalten hinzufügt,
ist das schon fundamentaler mit entsprechend imposanten fireTableStructureChanged()-Event
 

Conn

Aktives Mitglied
:cool: Hat jetzt mit dem
DefaultTableModel model = ..;
JTable table = new JTable(model);
wunderbar funktioniert. Ich weiß nicht, was ich vorhin falsch gemacht habe. Es sieht jetzt so aus:

Code:
model.setDataVector(this.raetsel, this.tabellenKopf);
        
        this.tabelle = new JTable(model);
        this.tabelle.setSelectionBackground(Color.ORANGE);
        this.tabelle.setRowSelectionAllowed(true);
        this.tabelle.getSelectionModel().addListSelectionListener(this);
        
        this.tabelle.setBorder(BorderFactory.createEtchedBorder());
        cp.add(this.tabelle, BorderLayout.CENTER);
        JScrollPane scroll = new JScrollPane(this.tabelle);
        cp.add(scroll, BorderLayout.CENTER);

auf die extra TableModel Klasse konnte ich so verzichten und es ist very easy zu handhaben.

Nochmals vielen Dank für die Geduld, dickes Lob. Grüsse. Conrad.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
lolkind eine Zeile und Tabelle ist Rechtsbündig? AWT, Swing, JavaFX & SWT 3
A Prob:Tabelle bei Zellensprung: Letzte zeile doppelt sichtbar AWT, Swing, JavaFX & SWT 7
A Aktion beim anklicken einer Zeile in einer Tabelle ausführen AWT, Swing, JavaFX & SWT 4
J Zeile in Tabelle zufügen AWT, Swing, JavaFX & SWT 7
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
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
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
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
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
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
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
H Markierte Zeile löschen AbstractTableModel AWT, Swing, JavaFX & SWT 10
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
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
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
G JTable Zeile mit Farbe füllen AWT, Swing, JavaFX & SWT 2
G JTable komplette Zeile auf deaktiv setzen AWT, Swing, JavaFX & SWT 2
B JTable erste Zeile aktiv AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen


Oben