PropertyChangeListener - JTable bei neuen Objekten updaten?

membersound

Bekanntes Mitglied
Hallo,

ich habe eine JTable an eine Liste gebunden, um die enthaltenen Objekte darzustellen.
Funktioniert auch bereits, wenn ich die Objekte und Liste vor dem initialisieren der JTable erstellen.

Aber JTable soll ja auch neue Objekte aufnehmen. Ich verstehe allerdings nicht, wie ich im View mit der Tabelle auf Changes in der Liste horchen kann. Was muss ich da machen? :bahnhof:

Das hier ist mein Model:

Java:
public class Route {
    private String start, destination;
 
    public Route() {   
    }   
 
    public Route(String start, String destination) {   
    this.start = start;
    this.destination = destination;
    }   
    //getter + setter...
}
 
 
 
public class MyRouteCollection {
 
    private List<Route> routeList = new ArrayList<Route>();
    public static final String PROP_ROUTELIST = "routeList";
    
    private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }

    public MyRouteCollection() {
    }

    public void addRoute(Route r) {
        List<Route> oldRouteList = this.routeList;
        this.routeList.add(r);
        propertySupport.firePropertyChange(PROP_ROUTELIST, oldRouteList, routeList);
    }
}

public class View extends JFrame {
   private MyRouteCollection routes = new MyRouteCollection();
   private JTable dataTable;

   public view() {
      //create some objects and add them to the route list
      initComponents();
      //by now the jtable shows up with the content

      //add additional test objects
      routes.addRoute(new Route("home", "farfaraway"));
      //how do I listen on new objects added?
   }
}
 
Zuletzt bearbeitet:
Also ich nehme mal an dein Problem schaut so aus:
Du hast einen Table mit Zielorten, klickst die an und dann sollen sie nach der Reihe in deine Liste gespeichert werden ja?
 
ne, es werden zur laufzeit neue objekte in der lister erstellt, welche dann auch in die Tabelle übernommen werden sollen.

Dazu brauchst du entweder ne eigene Table oder TabelModel-Klasse welche du als Listener an die Liste hängst und dann die Daten hinzufügst.
 
Also ich nehme mal an dein Problem schaut so aus:
Du hast einen Table mit Zielorten, klickst die an und dann sollen sie nach der Reihe in deine Liste gespeichert werden ja?
Nein, ich habe eine List (MyRouteCollection), die Objekte vom Typ Route enthält. Jedes Route-Objekt hat ein Start und Ziel Feld.

Dann habe ich ein View, in dem die Spalten "Start" und "Destination" sichtbar sind.
Über Bean-Bindings binde ich die Liste an die JTable, um den Inhalt aller enthaltenen Objekte anzeigen zu lassen.
Java:
ELProperty eLProperty = ELProperty.create("${routeList}");
JTableBinding jTableBinding = SwingBindings.createJTableBinding(UpdateStrategy.READ_WRITE, this, eLProperty, dataTable, "dataTable");
ColumnBinding columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${from}"));
//usw

Bis dahin auch alles wunderbar.

Später möchte ich aber natürlich weiter Objekte hinzufügen können. Bisher mache ich das einfach manuell als letzten Aufruf zum testen im View: routes.addRoute(new Route("home", "farfaraway"));

So, jetzt enthält die Liste also ein Objekt mehr, die JTable sieht aber natürlich noch aus wie vorher.
Ich möchte jetzt, dass die JTable sich automatisch updaten, wenn ein Objekt erzeugt/gelöscht/manipuliert wird etc.

Dafür scheint man PropertyChangeListener zu benutzen.
Wie ich diese in meinem Model, also in der Collection, schreibe hab ich verstanden.
NUr nicht, wie ich das jetzt in meinem View nutzbar mache. Bzw wie ich eben die ChangeListener dazu nutze, um die JTable zu aktualisieren?
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben