ArrayList wird immer um zwei Elemente erweitert

nieselfriem

Bekanntes Mitglied
Hallo!
In diesem kleinen Beispiel habe ich eine Tabelle die mit einer Datenbank befüllt werden soll und auf Veränderungen in ein den Zellen reagieren soll. Diese Veränderungen sollen in einer ArrayList gespeichert werden um sie dann später wieder der Datenbank zurück zu führen. Nur wird statt einem die ArrayLIst immer um zwei Elemente erhöht
Java:
import java.awt.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.*;
import java.util.ArrayList;

public class Main extends JFrame implements TableModelListener {

    private JTable table;
    private MyDBTableModel model;
    private JLabel gesamt;
    private JButton button;
    private SqlType sqlt = new SqlType();
    private ArrayList<SqlType> sqllist = new ArrayList<SqlType>();
 

    public Main() {
        super("Tabletest");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();

        model = new MyDBTableModel();
        model.addTableModelListener(this);

        table = new JTable(model);
        table.getModel().addTableModelListener(this);
        table.setPreferredScrollableViewportSize(
                new Dimension(400, 80));
        c.add(new JScrollPane(table));

        button = new JButton("OK");
        button.setEnabled(false);
        c.add(button, BorderLayout.SOUTH);

        pack();
        setVisible(true);
            System.out.println("Arraylistgroesse im Kosntrucktor=" + sqllist.size());//beim start 0
    }//Konstrukor

    public void tableChanged(TableModelEvent e) {
        //gesamt.setText("Tabelle wurde verändnert");
        int row = table.getEditingRow();
        int column = table.getEditingColumn();
        String spaltenname = table.getColumnName(column);
        System.out.println("SelectedRow=" + row + "Selected Column=" + column);
        TableModel model2 = (TableModel) e.getSource();
        String columnName = model2.getColumnName(column);
        Object data = model2.getValueAt(row, column);
        int id = (Integer) model2.getValueAt(row, 0);

        System.out.println("Data" + data);
        System.out.println("Spaltenname=" + spaltenname);
        sqlt.setAttribName(columnName);
        sqlt.setData(data);
        sqlt.setId(id);//muss noch ermittelt werden
        sqllist.add(sqlt);
        System.out.println("Arraylistgroesse=" + sqllist.size());//nach einerZelle = 2
        button.setEnabled(true);
    }//tableChanged

    public static void main(String[] args) {
        // TODO code application logic here
        new Main();
    }
}
Wobei der Datentyp SqlType eine Kalsse ist die wie folgt aussieht:
Java:
package mydbtable;

public class SqlType {
    private String attribName;
    private Object data;
    private int id;

    public SqlType() {

    }

    public void setId(int id) {
        this.id=id;
    }

    public void setData(Object data) {
        this.data=data;
    }

    public void setAttribName(String  attribName) {
        this.attribName=attribName;
    }

    public int getId() {
        return this.id;
    }
    public Object getData() {
        return this.data;
    }

    public String getAttribName() {
        return this.attribName;
    }
}
Wieso wird die Größe der ArrayList immer um zwei statt um eins erhöht?

Gruß niesel
 

diel2001

Bekanntes Mitglied
Hi
wahrscheinlich wird die Methode 2 mal aufgerufen.
Warum kann ich dir auch nicht sagen,
aber es kann sein, dass 2 Events auflaufen und deshalb 2 Elemente
reinbekommst.
Warum debuggst du nicht ??
 

Marco13

Top Contributor
Code:
System.out.println("Vorher Arraylistgroesse=" + sqllist.size());
sqllist.add(sqlt);
System.out.println("Nachher Arraylistgroesse=" + sqllist.size());
Wenn bei "Nachher" eine andere Zahl rauskommt als die bei "Vorher"+1, sag' bescheid.

Vermutlich wird der Listener einfach zu oft benachrichtigt. Gib' vielleicht mal aus, was das für ein Event ist, der da ankommt...
 

nieselfriem

Bekanntes Mitglied
Das event der tabellenänderung scheint tatsächlich zweimal aufgerufen zu werden
denn meine Ausgabe gibt bei eine zellenänderung folgendes aus:
Code:
Arraylistgroesse im Kosntrucktor=0
SelectedRow=2 Selected Column=2
Data neues Datum
Spaltenname=Vorname
Vorher Arraylistgroesse=0
nacher Arraylistgroesse=1
SelectedRow=2 Selected Column=2
Data neues Datum
Spaltenname=Vorname
Vorher Arraylistgroesse=1
nacher Arraylistgroesse=2
;
P.S.: habe die Methode tableChanged nochmal verändert und datbei das model2 heruas genommen. dies war wohl unsinnig. Hat aber keine Wirkung gezeigt:
Java:
 public void tableChanged(TableModelEvent e) {
        //gesamt.setText("Tabelle wurde verändnert");
        int row = table.getEditingRow();
        int column = table.getEditingColumn();
        String spaltenname = table.getColumnName(column);
        System.out.println("SelectedRow=" + row + "Selected Column=" + column);
        //TableModel model2 = (TableModel) e.getSource();
        String columnName = table.getColumnName(column);
        Object data = table.getValueAt(row, column);
        int id = (Integer) table.getValueAt(row, 0);

        System.out.println("Data" + data);
        System.out.println("Spaltenname=" + spaltenname);
        sqlt.setAttribName(columnName);
        sqlt.setData(data);
        sqlt.setId(id);//muss noch ermittelt werden
        System.out.println("Vorher Arraylistgroesse=" + sqllist.size());
        //sqllist.add(sqlt);
        System.out.println("nacher Arraylistgroesse=" + sqllist.size());
        button.setEnabled(true);
    }//tableChanged
Gruß niesel
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ja, wo der Event das zweite mal herkommt kann man eben nicht nachvollziehen.
Gib ihn mal mit System.out.println("Event: "+e); aus, vielleicht hilft's...
 

nieselfriem

Bekanntes Mitglied
Die Ausgabe lautet wie folgt:
Code:
Arraylistgroesse im Kosntrucktor=0
SelectedRow=2Selected Column=2
Data neues Datum
Spaltenname=Vorname
Vorher Arraylistgroesse=0
nacher Arraylistgroesse=1
Count=1
Event: javax.swing.event.TableModelEvent[source=mydbtable.MyDBTableModel@3bb2b8]
SelectedRow=2Selected Column=2
Data neues Datum
Spaltenname=Vorname
Vorher Arraylistgroesse=1
nacher Arraylistgroesse=2
Count=2
Event: javax.swing.event.TableModelEvent[source=mydbtable.MyDBTableModel@3bb2b8]
Wobei das TableModel bei mir wie folgt aussieht:
Java:
import java.awt.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.*;
import java.sql.*;

public class MyDBTableModel extends AbstractTableModel {

    private String[] COLUMN_NAMES = {"ID", "Name", "Vorname"};//Spaltennamen
    private static final Class[] COLUMN_CLASSES = {Integer.class, String.class, String.class};
    private Object[][] data;
    private String query = "SELECT * from mitarbeiter";

    public MyDBTableModel() {
        CollectDatas cl = new CollectDatas();
        ResultSet rs = cl.Abfage(query);
        data = cl.makeDataArray(3, rs);
        System.out.println("------------Tabellenarray----");
        for(int i=0; i<10; i++) {
            for(int j=0; j<3;j++) {
               System.out.println(data[i][j]);
            }
        }
    }

    public Class getColumnClass(int col) {
        return COLUMN_CLASSES[col];
    }

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

    public String getColumnName(int col) {
        return COLUMN_NAMES[col];

    }

    public Object getValueAt(int col, int row) {
         Object _obj = null;
        _obj = data[col][row];
        return _obj;
    }

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

    public boolean isCellEditable(int row, int col) {
        return (col == 1 || col == 2) ? true : false;
    }

    public void setValueAt(Object value, int row, int col) {
        if (value == null) {
            return;
        }
        data[row][col] = value;
        fireTableDataChanged();
    }
}

Gruß niesel
 

nieselfriem

Bekanntes Mitglied
OK, das war sicherlich ein dummer Fehler. Jedoch besteht weiter das Problem, dass selbst Doppelclicks als Ereignis gewertet werden. Also man macht ein Doppelclick in die Zelle, die Editierbarkeit ist gegeben es wird jedoch nicht geändert. Trotzdem wird es als Editieren einer Zelle gewertet und die ArrayList gefüllt. Ich hatte angenommen, das
Code:
getEditingRow()
und
Code:
getEditingColumn()
nur ein Ereignis werfen, wenn wirklich etwas verändert worden ist. Kann man das evtl. noch beeinflussen?

Gruß
 

Michael...

Top Contributor
Sobald Du einen Doppelclick auf eine Zelle machst, wird der Editor aktiv. Wenn dieser nun nicht per Escape beendet wird, gilt die Zelle als editiert.
Soll das Verhalten geändert werden (Zelle gilt nur als editiert, wenn der Inhalt vorher zu nachher sich unterscheidet) könnte man das mit einem eigenen CellEditor machen.
Eventuell lässt sich das auch einfacher lösen, aber leider fällt mir da spontan nichts ein...
 

Marco13

Top Contributor
Oh, ich hatte gehofft dass beim toString vom TableModelEvent ein bißchen mehr Info steht. Insbesondere der Typ des events. Du kannst dir von dem Event mal
int getColumn()
int getFirstRow()
int getLastRow()
int getType() ( Returns the type of event - one of: INSERT, UPDATE and DELETE)
ansehen, daraus müßte man eigentlich ableiten können, ob doort wirklich was zu tun ist oder nicht...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
N ArrayList: Das zweite Element wird zur Liste nicht eingefügt nach dem zweiten request. Java Basics - Anfänger-Themen 3
thobren arraylist es wird nur der letzte Eintrag angezeigt Java Basics - Anfänger-Themen 2
J ArrayList<int[]> wird beim hinzufügen von werten komplett überschrieben warum? Java Basics - Anfänger-Themen 1
F In ArrayList wird nicht der richtige Wert gespeichert Java Basics - Anfänger-Themen 6
C Methoden Arraylist wird "überschrieben" Java Basics - Anfänger-Themen 7
B ArrayList wird nicht befüllt. Java Basics - Anfänger-Themen 5
J Arraylist wird überschrieben? Java Basics - Anfänger-Themen 5
krgewb ArrayList allgemein halten Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
W ArrayList und toString Java Basics - Anfänger-Themen 17
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M 2d ArrayList durchgehen Java Basics - Anfänger-Themen 2
Blkckroll45 Arraylist Java Basics - Anfänger-Themen 6
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
thobren jtable arraylist Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
Zeppi OOP ArrayList Java Basics - Anfänger-Themen 2
P ArrayList Java Basics - Anfänger-Themen 4
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
M For Schleife/ArrayList Java Basics - Anfänger-Themen 12
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
krgewb ArrayList von ArrayList Java Basics - Anfänger-Themen 2
R ArrayList Problem Java Basics - Anfänger-Themen 6
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
B Objektverwaltung mit ArrayList in einer seperaten Klasse Java Basics - Anfänger-Themen 24
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
F java.util.ArrayList Java Basics - Anfänger-Themen 3
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Arraylist zu einem Array bringen mit Verschachtelung Java Basics - Anfänger-Themen 11
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H ArrayList Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
K Zahlenfolge ArrayList Java Basics - Anfänger-Themen 3
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
F Array in ArrayList ablegen Java Basics - Anfänger-Themen 3
V ArrayList Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
X Frage zur einer ArrayList in einer ArrayList Java Basics - Anfänger-Themen 5
F Arraylist als Pfadausgabe Java Basics - Anfänger-Themen 10
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
M Problem mit ArrayList Java Basics - Anfänger-Themen 32
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben