Zeilen in Tabelle hinzufügen und löschen

Status
Nicht offen für weitere Antworten.
S

sofa-surfer

Gast
Hallo,

man nehme eine JTable, angebracht auf einer von JPanel erbenden Klasse. Diese Klasse besitzt u.a. zwei Methoden:

Code:
public void addFile(File file)
{
    Vector content = new Vector();
    
    // alles mögliche (für hier nicht wichtige)

    content.add(tree);
    content.add(size);

    ((DefaultTableModel)table.getModel()).addRow(content);
    // table ist die eben die oben genannte Tablle
}

public void removeFiles(int[] selection)
{
    for (int i=selection.length - 1; i>=0; i--)
        ((DefaultTableModel)table.getModel()).removeRow(selection[i]);
    // das int - Array entspricht den markierten Zeilen der Tabelle
}

Dabei funktioniert leider nur die Methode zum Hinzufügen. Bei der zum Löschen bekomme ich beim Entfernen der letzten Zeile eine ArrayIndexOutOfBounds-Exception im zur Tabelle gehörigen CellEditor (wenn ich wieder auf ein Tabellenelement klicke) :bahnhof: Dieser erbt von der JTreeTable (http://java.sun.com/products/jfc/tsc/articles/treetable1/). Ansonsten stimmt das auch alles nicht so ganz, was da passiert.
In der Grundfunktionalität hab ich ihn einfach an den aus dem hiesigen Tutorial übernommen. Das Problem tritt in der fireEditingStopped()-Methode auf.

Jemand ne Ahnung wie das im Zusammenhang steht? Ich wäre sehr verbunden, mir sind nämlich die Ideen ausgegangen ....

Danke,
Matthias
 

abollm

Top Contributor
Ich bin mir nicht ganz sicher (dazu bräuchte ich mehr Code zum Testen), aber versuch es einmal so, dass du die folgenden Zeilen am Beginn deiner Methode "removeFiles"einfügst:
Code:
...
		int index = table.getSelectedRow();
		if (index < 0)
			return;
...
 

bambi

Bekanntes Mitglied
Jepp. Wuerde mal vorschlagen, dass Du noch etwas mehr Code postest, wenn's net geht. Aus den 2
Zeilen kann man nicht so viel erkennen...
 
S

sofa-surfer

Gast
also dass die richtigen zeilen (die selektierten) übergeben werden, hab ich überprüft, das stimmt soweit
noch ein bisschen code kommt sofort ....
 
S

sofa-surfer

Gast
hier der CellEditor mit der Methode fireEditingStopped, wo ich eine Exception bekomme

Code:
public class TreeTableCellEditor extends JTreeTable implements TableCellEditor
{

    private Vector listeners = new Vector();

    public TreeTableCellEditor()
    {
        super(new MP3Model());
    }
    
    public boolean stopCellEditing()
    {
         fireEditingStopped();
         return true;  
    }
    
    protected void fireEditingStopped()
    {
        ChangeEvent e = new ChangeEvent(this);
        for (int i = 0, n= listeners.size(); i<n; i++)
        {
            ((CellEditorListener)listeners.get(i)).editingStopped(e); 
            // hier gibts ne Exception, d.h. in dem listeners-Vector soll ein Element gelesen werden, das es nicht mehr
             //gibt
        }    
    }
}
Alle anderen Methoden sind so wie im Tutorial.
Die Klasse in der die selektierten Zeilen gelesen werden:

Code:
public class DetectorGUI()
{
    // der Button zum Löschen der Zeilen:
    remove_button.addMouseListener
    (
        new MouseAdapter()
        {
            public void mouseClicked(MouseEvent e)
            {
                // bestimmen der aktuellen Tabelle (es ist möglich, mehrere geöffnet zu haben, Auswahl über eine JList 
                // classifiers
                ClassifierGUI classifier = (ClassifierGUI)classifiers.getSelectedValue();
                JTable table = classifier.getTable();
                int[] selection = table.getSelectedRows();
                // Aufruf der obigen Methode zum Löschen der Zeilen
                classifier.removeFiles(selection);
            }
        }

    );
}

Und dann noch die Klasse in der Tabelle sitzt und die auch die Methoden zum Löschen und Hinzufügen von Zeilen hat:

Code:
public class ClassifierGUI extends JPanel
{
    private ClassifierTable table;
    
    public ClassifierGUI(String label)
    {
        table = new ClassifierTable();
        this.add(table);
    }
}

So, fehlt noch die Tabelle an sich:

Code:
public class ClassifierTable extends JTable
{
    public ClassifierTable()
    {
        super(0,5);
        
        DefaultTableColumnModel cm = new DefaultTableColumnModel();
        TableColumn col;
        
        col = new TableColumn(0,200);
        col.setHeaderValue("File");
        // Setzen des CellEditors
        col.setCellEditor(new TreeTableCellEditor());

        cm.addColumn(col);

        // und halt noch alle anderen Spalten, die aber nix weiter besonderes sind

    }
}

Ich versteh nicht wie in dieser fireEditingStopped-Methode eine ArrayOutOfBounds-Exception entstehen kann, schließlich wird durch die for-Schleife doch abgesichtert, dass in dem Vector nur auf Elemente zugegriffen wird, die auch wirklich drin sind ( n= listeners.size() )
 

Wildcard

Top Contributor
Was soll dann das für eine for-Schleife sein?
Code:
for (int i = 0, n= listeners.size(); i<n; i++)
 

L-ectron-X

Gesperrter Benutzer
Wieso Wildcard, die ist doch korrekt?
Damit die size()-Methode beim Prüfen der Bedingung nicht immer wieder aufgerufen wird, kann man sowas schon beim Initialisieren der Schleife erledigen und nur noch die int-Variablen prüfen.
 

Wildcard

Top Contributor
L-ectron-X hat gesagt.:
Wieso Wildcard, die ist doch korrekt?
Damit die size()-Methode beim Prüfen der Bedingung nicht immer wieder aufgerufen wird, kann man sowas schon beim initialisieren der Schleife erledigen und nur noch die int-Variablen prüfen.
:oops: Schneller geschrieben als gedacht. Du hast natürlich recht!
sry :D
[edit]hielt das ',' für einen ';' :roll: [/edit]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
G Tabelle mit variabler Anzahl an Zeilen AWT, Swing, JavaFX & SWT 3
L Tabelle mit 5 spalten und 2 Zeilen erzeugen AWT, Swing, JavaFX & SWT 4
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
T TableView Zeilen einfärben AWT, Swing, JavaFX & SWT 13
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
M Befüllung der einzelnen Zeilen des TableView AWT, Swing, JavaFX & SWT 3
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
X Zeilen aus einer Textdatei einzelnd als String abrufen AWT, Swing, JavaFX & SWT 8
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
J JavaFX TableView - Höhe der Zeilen AWT, Swing, JavaFX & SWT 3
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
B Java FX TableView Zeilen mit verschiedenen Typen AWT, Swing, JavaFX & SWT 15
P jtabel Zeilen auswählbar, aber nicht editierbar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
D JGridLayout zwischen Zeilen bestimmter Abstand AWT, Swing, JavaFX & SWT 3
B Swing BalloonTip erscheint nicht in den ersten Zeilen einer JXTable AWT, Swing, JavaFX & SWT 4
Bluedaishi JTable alle Zeilen löschen AWT, Swing, JavaFX & SWT 7
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
P gleichanfangende Zeilen solange auslesen bis es die gibt AWT, Swing, JavaFX & SWT 12
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
O Swing JTable - Zeilen färben (mit Model) AWT, Swing, JavaFX & SWT 13
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
M Selektierte Zeilen von JTable AWT, Swing, JavaFX & SWT 10
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
M JTable Zeilen einfärben AWT, Swing, JavaFX & SWT 13
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
L JTableModel - Zeilen mit eigenem Index ausstatten AWT, Swing, JavaFX & SWT 4
S JEditorPane Zeilen zählen AWT, Swing, JavaFX & SWT 5
S Swing JTable Zeilen löschen AWT, Swing, JavaFX & SWT 21
J Swing JTable-Daten Speichern und bei zeilen-änderung beibehalten. AWT, Swing, JavaFX & SWT 6
B JTable Zeilen und Spalten selektieren AWT, Swing, JavaFX & SWT 5
kniffel Ausgabe von leeren JTable Zeilen AWT, Swing, JavaFX & SWT 3
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
B 2D-Grafik Zeilen drehen im JEditorPane AWT, Swing, JavaFX & SWT 3
0 JTable leere Zeilen einfügen AWT, Swing, JavaFX & SWT 3
M Markieren von ganzen Zeilen in transparenten Tabellen AWT, Swing, JavaFX & SWT 6
D JTable mit mehrzeiligen Zeilen AWT, Swing, JavaFX & SWT 5
kodela Swing selektierte Zeilen in JTable AWT, Swing, JavaFX & SWT 3
O Anzahl der Zeilen im TableViewer AWT, Swing, JavaFX & SWT 12
B Swing Zeilen Rotation AWT, Swing, JavaFX & SWT 5
J Swing JList: Neue Zeilen mit fireIntervalAdded sind automatisch selektiert AWT, Swing, JavaFX & SWT 2
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
D Tabellen Header & Abstand der Zeilen AWT, Swing, JavaFX & SWT 8
D Swing JTable: über sichtbare Zeilen iterieren AWT, Swing, JavaFX & SWT 2
U JTable: Zeilen abhängig vom Datensatz einfärben AWT, Swing, JavaFX & SWT 4
E JTextarea verschluckt Zeilen AWT, Swing, JavaFX & SWT 5
A JComboBox-Zeilen in JTable AWT, Swing, JavaFX & SWT 2
martin82 Swing JXTable gefilterte Zeilen AWT, Swing, JavaFX & SWT 4
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
B Swing JTable: mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 3
M JTable - mehrere Zeilen selektieren AWT, Swing, JavaFX & SWT 7
M JTable einzelne Zeilen färben AWT, Swing, JavaFX & SWT 2
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
A Swing JTable Zeilen einfügen verbieten AWT, Swing, JavaFX & SWT 3
elitebiber Swing Zeilen in einer JTable gruppieren AWT, Swing, JavaFX & SWT 3
Meldanor JTables - Zeilen hinzufügen/löschen AWT, Swing, JavaFX & SWT 4
T Wie Zeilen in Tabellen farblich differenzieren? AWT, Swing, JavaFX & SWT 3
R JScrollBar - Immer drei Zeilen weiter AWT, Swing, JavaFX & SWT 10
O Zeilen in JTable auf Grund eines Wertes einfärben AWT, Swing, JavaFX & SWT 6
R Suchbare Zeilen von JTable in JScrollPane ermitteln AWT, Swing, JavaFX & SWT 9
D Jlist auf 10 Zeilen begrenzen geht bei mir nicht AWT, Swing, JavaFX & SWT 2
O JTable Zeilen "nach oben" verschieben AWT, Swing, JavaFX & SWT 3
R Daten in JTable in mehreren Zeilen darstellen AWT, Swing, JavaFX & SWT 11
A Multiple Zeilen in einer JTable Zelle AWT, Swing, JavaFX & SWT 6
F Per KeyListener Zeilen aus JTable löschen AWT, Swing, JavaFX & SWT 9
K Mehrere Zeilen auf einem Button AWT, Swing, JavaFX & SWT 2
M JScrollbar + JTable + Zeilen wie in Excel hinzufügen AWT, Swing, JavaFX & SWT 14
D Ireport - Summe bilden von einzelnen Zeilen? AWT, Swing, JavaFX & SWT 1
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
Z JTable Zeilen nummerieren AWT, Swing, JavaFX & SWT 2
G Tabellenköpfe für die Zeilen AWT, Swing, JavaFX & SWT 3
G JTable mit JTextAreaEditor - Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 4
S Welcher Listener ? In JTable mehrere Zeilen markieren & AWT, Swing, JavaFX & SWT 2
P Tablle mit Zeilen Header (nicht spaltenheader) AWT, Swing, JavaFX & SWT 3
L JTabels und das Hinzufügen von Zeilen mit Inhalt AWT, Swing, JavaFX & SWT 17
J JTable - Wie Zeilen löschen ? AWT, Swing, JavaFX & SWT 8
K Zeilen von TextArea auswählen AWT, Swing, JavaFX & SWT 3
A Attribute von Objekten in JTable-Zeilen anzeigen AWT, Swing, JavaFX & SWT 2
D GridLayout mit nur einer Spalte, aber n Zeilen AWT, Swing, JavaFX & SWT 2
E JTable; Zeilen der ersten Spalte definieren? AWT, Swing, JavaFX & SWT 4
A JTable, bestimmte Zeilen blau hinterlegen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben