JTable spaltennamen/überschrift

Status
Nicht offen für weitere Antworten.

SebiB90

Top Contributor
ich hab eine JTable,die erstell ich so:

Code:
daten=new JTable(data,new String[]{"Vorname", "Nachname", "Geburtstag"});
wie kann ich jetzt machen das die spaltenüberschriften auch angezeigt werden?
 
das problem hatte ich neulich auch
ich glaub ich habs gelöst, indem ich der jtable einen jscrollpane verpasst hab ...

aber das table-tutorial von sun ist sehr gut!
 
ich hab mal ne frage zum tut
ich bin jetzt bei teil 2, 4.TableModel
da gibt es eine klasse namens model die die methode addTableModelListener(TableModelListener l) hat nur ich versteh nicht für was die da ist. ich find nirgends das die aufgeruft wird.
 
Andere Klassen die TableModelListener implementieren können sich mit dieser
Methode als Listener auf dem Model registrieren.
 
aber irgendwie funzt das nicht
ich hab die methode addVehicle umgeschrieben aber das funktioniert nicht so wie ich es will
es wird keine reihe hinzugefügt
warum?

edit:
hab es geschaft
 
ich hab jetzt ein anderes problem(vllt. sollte ich erst weiter lesen und dann fragen aber stellt mal trotzdem)
ich hab eine klasse in der die daten gespeichert sind die in die tabelle kommen soll.wie mach ich das jetzt das die tabelle aktualisiert wird wenn die daten sich ändern?
 
ich hab jetzt bis teil 5 gelesen aber keine lösung da drin gefunden und in 6 u. 7 kommt das auch nicht vor(glaub ich)
:cry: :cry: :cry:
 
Jedes TableModel hat Methoden "addTableModelListener" und "remove...".
Die JTable übergibt dem TableModel einen (oder mehrere) Listener, wenn sie das Model benutzen möchte.
Und wenn sich das TableModel verändert, muss es diese Listener aufrufen um der Aussenwelt mitzuteilen, dass da was passiert ist (ansonsten hat das JTable ja keine Möglichkeit zu erfahren, dass das Model z.B. neue Daten beinhaltet...).

Wenn du ein TableModel schreibst, musst du diese Aufrufe der Listener selbst machen (es sei denn, du erbst von AbstractTableModel, da sind einige Hilfsmethoden "fire..." drin).
 
das prob ist das:
die daten der tabelle werden in einer arraylist gespeichert die in einer anderen klasse ist
wie kann ich machen das die listener benachrichtigten werden, wenn daten hinzugefügt oder entfernt werden?
 
Dein Progi anders strukturieren :?

Ich würde das so machen: speicher die ArrayList innerhalb einer Klasse, welche von AbstractTableModel erbt.
Jeder der etwas zu der ArrayListe hinzufügen will, muss eine Methode "add..." dieser Klasse aufrufen.
Von der Methode "add..." aus, rufst du eine der "fireXX"-Methoden (z.B. fireTableRowInserted) des AbstractTableModels auf. Diese Methode wird dann die Listener benachrichtigen.
 
Du kannst auch noch eine Ebene dazwischenschalten: einen Controller der irgendwie die ArrayList überwacht und das Model informiert... wie auch immer: Trennung ist gut, aber irgendwo muss es eine Verbindung geben..
 
Nein. Du könntest dir höchstens selbst eine Liste schreiben, die das unterstützt.
 
Nein. Du könntest dir höchstens selbst eine Liste schreiben, die das unterstützt.

@SebiB90
nicht so tragisch wie's sich anhört.
einfach ArrayList extenden und ein paar kleine Änderungen vornehmen.
Dann machst du dir ein kleines Interface für den Listener und fertig.
 
Wildcard hat gesagt.:
Nein. Du könntest dir höchstens selbst eine Liste schreiben, die das unterstützt.

@SebiB90
nicht so tragisch wie's sich anhört.
einfach ArrayList extenden und ein paar kleine Änderungen vornehmen.
Dann machst du dir ein kleines Interface für den Listener und fertig.
nich so tragisch??? nicht so tragisch???
ich bin NEWBIE!!!
wie soll ich das machen
ich werd mir mal was überlegen, aber könntet ihr mir helfen.
 
Alsoooo:
Was brauchst du?
Du brauchst in deiner extendeten liste eine Methode
Code:
fireHilfeIchHabMichVerändertBittePassDieTableAnMethode(TableVeränderungsEvent TVE)
um die Listener zu informieren.
du brauchst eine
Code:
addArrayListenerMethode(ArrayListener listener)
um die Listener zu registrieren.
du brauchst eine
Code:
removeArrayListenerMethode(ArrayListener listener)
um sie wieder los zu werden.
Wenn du etwas am Array änderst musst es selbstständig die fire Methode aufrufen um die
Listener zu informieren.
ein Interface kann jeder Horst schreiben, das erspar ich dir :wink:
Jede Klasse die eine Veränderung des Array's interessiert muss das Interface implementieren
und sich dann als Listener auf deinem Array registrieren.
Fertisch 😀
 
ich hab jetzt ein abstract class für den listener geschrieben baer wenn ich den jetzt implementieren will bekomm ich diese Fehlermeldung
Code:
"Model.java": Hier wird ein Interface erwartet in Zeile 8, Spalte 58
hier die zeile 8:
Code:
public class Model extends AbstractTableModel implements PersonenListListener {
und hier die class PersonenListListener
Code:
package organizer;

abstract public class PersonenListListener {
  abstract public void personAdded();
  abstract public void personRemoved();
}

edit :
hats sich erledigt
hab class durch interface ersetzt
 
irgendwie funzt das nicht
ich hab das implementiert und die methode wird auch aufgerufen aber es funzt nicht :cry:
im tablemodel hab ich den den listener implementiert und hier ist die methode
Code:
public void personAdded() {
    for(Iterator i=this.listeners.iterator();i.hasNext();) {
      ((TableModelListener)i.next()).tableChanged(new TableModelEvent(this,this.getRowCount()));
    }
  }
aber in der tabelle wird nix angezeigt
*heul*
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben