jTable tableChanged?

Status
Nicht offen für weitere Antworten.
A

abc1000

Gast
Hallo Leute,

ich komm einfach nciht drauf! Ich versuche einen TableListener hinzuzufügen, der bei einer Änderung der Tabelle reagieren soll und mir die neuen Daten zurückgibt. Hab vieles probiert, aber irgendwie hat nichts geklappt. Kann mir jemand kurz ein Beispiel geben?

Schon mal danke!
Alex
 
S

SlaterB

Gast
Code:
public class Test
{
    public static void main(String[] args)
    {
        JTable t = new JTable(5, 5);
        t.getModel().addTableModelListener(new TableModelListener()
            {

                public void tableChanged(TableModelEvent e)
                {
                    System.out.println("changed");
                }
            });

        t.setValueAt("a", 2, 2);
        t.getModel().setValueAt("a", 2, 2);
    }
}
am besten nur direkt mit dem Model arbeiten,
die JTable ist eine Darstellungsform (View), die mit den Daten weniger zu tun haben sollte
 
A

abc1000

Gast
Hallo,

danke! Ich arbeite mit einem AbstractTableModel. Wenn ich deinen Code hinzufüge, das Programm starte und in der Tabelle z.B. eine Zelle editiere, gibt mir das Programm nicht "changed" aus. Woran kann das liegen?

Gruß Alex
 
S

SlaterB

Gast
Code-Ausschnitt aus AbstractTableModel:
Code:
    /**
     *  Returns false.  This is the default implementation for all cells.
     *
     *  @param  rowIndex  the row being queried
     *  @param  columnIndex the column being queried
     *  @return false
     */
    public boolean isCellEditable(int rowIndex, int columnIndex) {
	return false;
    }

    /**
     *  This empty implementation is provided so users don't have to implement
     *  this method if their data model is not editable.
     *
     *  @param  aValue   value to assign to cell
     *  @param  rowIndex   row of cell
     *  @param  columnIndex  column of cell
     */
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    }

dagegen DefaultTableModel extends AbstractTableModel :

Code:
    /**
     * Returns true regardless of parameter values.
     *
     * @param   row             the row whose value is to be queried
     * @param   column          the column whose value is to be queried
     * @return                  true
     * @see #setValueAt
     */
    public boolean isCellEditable(int row, int column) {
        return true;
    }


    /**
     * Sets the object value for the cell at <code>column</code> and
     * <code>row</code>.  <code>aValue</code> is the new value.  This method
     * will generate a <code>tableChanged</code> notification.
     *
     * @param   aValue          the new value; this can be null
     * @param   row             the row whose value is to be changed
     * @param   column          the column whose value is to be changed
     * @exception  ArrayIndexOutOfBoundsException  if an invalid row or
     *               column was given
     */
    public void setValueAt(Object aValue, int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        fireTableCellUpdated(row, column);
    }

falls du ein eigenenes Model benutzt, welches von AbstractTableModel erbt, dann musst du ähnliches erarbeiten,
nur mit AbstractTableModel kannst du ja gar keine Daten speichern
 

rorton

Mitglied
Ich habe ein ähnliches Problem aber irgendwie komme ich einfach nicht drauf... Google hat mir auch nicht besonders geholfen:

Ich brauche bitte Hilfe mit folgenden Klassen, da ich nicht genau weiß wo ich was noch implementieren muss..

MVC-Architektur-
3 Klassen:

+AbstractTableModel

+Hauptfenster-Klasse: GUI mit Eingabefelder und Buttons für die Speicherung von neuen Film-Objekten
, JTable und meine erstellte Klasse TableModel extends AbstractTableModel werden dort instanziert!

+MainController-Klasse: - dient eben als Actionlistener für die Button-Events und als Startpunkt

..In meiner Gui hab ich ein Eingabefenster, wo ich alles Eigenschaften eingebe.. mit dem speichern-button wird das Objekt in einer ArrayList gespeichert und soll dann im JTable erscheinen!
Mein Problem ist jetzt, ich weiß nicht wie ich dem AbstractTableModel klarmachen soll den Table neu zu zeichnen, da es ja jetzt einen neuen Datensatz gibt!
Das funktioniert eben noch nicht.. wenn ich das programm neu starte werden bei der ersten erstellung des Tables die daten ganz normal angezeigt, aber nicht wenn das App läuft!

Kann mir jemand einen Denkanstoß geben, ob ich einen Listener brauche und wo ich was in meinen Klassen implementieren muss... Ich brauche nur einen groben Überblick!

Danke Leute!
 
S

SlaterB

Gast
in AbstractTableModel gibts
fireTableDataChanged();

das ist bisschen grob über alles, aber tut es erstmal
 

rorton

Mitglied
Danke für die schnelle Antwort..

Das heißt im Klartext ich brauch nur diese Methode in meiner actionPerformed des Buttons im MainController angeben und der Table zeichnet sich from scratch?

wie implentiere ich die fireTableDataChanged im model aus?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
from scratch ist übertrieben wenn man es hier genau gibt, noch höher ist gar
fireStructureChanged();
dann kommt die Tabelle auch mit geänderter Spaltenzahl klar,

ansonsten: ja, du hattest eine Frage gestellt und ich eine Antwort gegeben,
jetzt wo du nachfragst bestätige ich dir dass ich es immer noch für die richtige Anwort zu deiner Frage halte ;)

wo es genau stehen muss und was sonst noch alles zu bedenken ist ist damit nicht gesagt,
an passender Stelle so dass es zur richtigen Zeit drankommt
 

rorton

Mitglied
ja danke, ist mir klar!

jedoch ist mir nicht ganz klar, wie ich fireTableDataChanged im model implementieren muss, damit sich der table neu zeichnet!

wenn ich die methode nicht selbst implementiere kann ich diese auch nicht aufrufen. Für diese Methode brauche ich aber auch einen Listener oder?
 
S

SlaterB

Gast
selber implementieren wäre relativ schwer, in AbstractTableModel (der vorgegebenen Java-Klasse diesen Namens) gibt es die fertig,
wieder (wie 2008) Quellcode:

Java:
    /** List of listeners */
    protected EventListenerList listenerList = new EventListenerList();

    /**
     * Adds a listener to the list that's notified each time a change
     * to the data model occurs.
     *
     * @param	l		the TableModelListener
     */
    public void addTableModelListener(TableModelListener l) {
	listenerList.add(TableModelListener.class, l);
    }


    /**
     * Notifies all listeners that all cell values in the table's
     * rows may have changed. The number of rows may also have changed
     * and the <code>JTable</code> should redraw the
     * table from scratch. The structure of the table (as in the order of the
     * columns) is assumed to be the same.
     *
     * @see TableModelEvent
     * @see EventListenerList
     * @see javax.swing.JTable#tableChanged(TableModelEvent)
     */
    public void fireTableDataChanged() {
        fireTableChanged(new TableModelEvent(this));
    }
usw., wenn dein Model von AbstractTableModel erbt, dann gibt es das alles schon,
bei table.setModel(model); registiert sich die Tabelle als Listener usw.

edit: da steht tatsächlich 'scratch' bei fireTableDataChanged, gut geraten vorhin
 
Zuletzt bearbeitet von einem Moderator:

rorton

Mitglied
wow, na das nenn ich mal eine erklärung! Danke.. du solltest Java-Unterricht geben, wenn du es nicht bereits tust! :)

Thanks, hat voll geholfen und funzt super!:applaus:
 

rorton

Mitglied
Ich hätte noch eine Frage zu ListSelectionEvent!

Pro Zeile in meinem JTable steht ein Objekt meiner Klasse Movie.. (Titel,Actor...), die wie schon erwähnt aus meiner arraylist kommen.

wie stell ich das an, das wenn ich irgendwo in eine Zeile klicke, ich alle Eigenschaften des dort befindlichen Objektes meiner Klasse Movie auslesen kann... zum beispiel in eine Gui mit Textfeldern..?
 

rorton

Mitglied
Danke, Listener funzt.
Mir ist nur nicht ganz klar, wie ich in meiner valueChanged()-Methode vorgehen muss, damit ich an die Objekte die in meiner ArrayList stecken rankomme.. Die Daten aus der ArrayList werden im AbstractTableModel mit getValueAt in den Table geladen.. nur wie bekomme ich die wieder raus? über den Table oder über das AbtractTableModel?
 
S

SlaterB

Gast
besser über das Model, entweder 'offiziell' getValueAt() abfragen,
oder du kennst den genauen Typ des Models und kannst dort beliebige andere Methoden verwenden
 

rorton

Mitglied
alles klar, leuchtet mir ein! werd ich heute abend versuchen... danke für die hilfe!

weiß zwar noch nicht genau wie an die methoden meiner arraylist rankomm damit ich datensätze löschen kann! Ich hab z.b in einer zeile alle eigenschaften meiner Movie-Klasse.. mit einem klick lade ich alle diese eigenschaften in eine eigene gui mit textfelder... dort kann man dinge bearbeiten und speichern.. somit bräuchte ich ja die add() und remove() meiner ArrayList!
 
S

SlaterB

Gast
solange du nicht vergisst, fireTableDataChanged() oder ähnliches am Ende aufzurufen, baue von mir aus auch eine get-Methode ein die die Liste an sich liefert
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JTable bei aktivieren einer Zelle soll Text selektiert werden. Java Basics - Anfänger-Themen 24
G JTable setModel(myModel) ok -> wie wieder unset machen? Java Basics - Anfänger-Themen 8
G JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
G JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
G JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
G JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 3
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
F Methoden JTable + 2 For-Schleifen Java Basics - Anfänger-Themen 4
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
G JTable: Werte in Tabelle direkt ansprechen Java Basics - Anfänger-Themen 3
S Icons in JTable per ResultSet Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
M Zelle von JTable mit Rahmen versehen Java Basics - Anfänger-Themen 4
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
G JTable: mehrzeilige Zellen erstellen Java Basics - Anfänger-Themen 2
W Problem JTable Java Basics - Anfänger-Themen 5
M JTable wird nicht aktualisiert Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben