Logisches Problem zwischen 2 Klassen

hesk

Erfahrenes Mitglied
Hallo!

Die erste Klasse ist zur Darstellung der Seite gedacht.
In dieser wird eine jTable erzeugt.

Java:
private JTableFilterHeader table;
.
.
.
table = new JTableFilterHeader( data, columnData );

Die JTableFilterHeader-Klasse implementiert ItemListener sodass ich mitbekomme wenn eine ComboBox(welche sich in der JTable befindet) sich ändert. Je nachdem was mit der Checkbox passiert, wird die Table verändert.

Jetzt möchte ich gerne in der ersten Klasse auch mitbekommen, dass die ComboBox sich geändert hat.

Wie macht man das am besten?
 
Zuletzt bearbeitet:

hesk

Erfahrenes Mitglied
Ich meinte ComboBox. Habs ausgebessert.

In der Table kann man anhand der ComboBoxes filtern.
Unterhalb der Table wird dann angezeigt, wieviele Einträge gerade vorhanden sind.
Also muss die 1. Klasse wissen wann sich die ComboBoxes der Table geändert haben.
 

hesk

Erfahrenes Mitglied
Die JTable ist eine eigene Klasse, in einem eigenen File.
Dort befindet sich die ComboBox.

Wenn ich jetzt der ComboBox den Listener der ersten Klasse(frame) adde, dann kann ich die JTable-Klasse niergendwo anders verwenden.

Ich möchte sie aber auch in anderen Frames verwenden.

Halbwegs verständlich:)?
 

HonniCilest

Erfahrenes Mitglied
Die einfachste Möglichkeit ist meiner Meinung nach den Eventcode in der UI-Klasse hinzuzufügen, also:
Java:
class Darstellung implements ActionListener //oder ItemListener****
combobox.addActionListener(this);
Oder hat es eventuell einen speziellen Grund, dass du dafür eine eigene Klasse erstellst?
 

hesk

Erfahrenes Mitglied
Ja, die gesamte JTable ist eine eigene Klasse. Die JTable enthält ComboBoxes im Header anhand jener gefiltert werden kann.

Das Frame(1. Klasse) erzeugt nun so eine JTable und stellt sie dar. Jetzt müßte ich aber noch im Frame mitbekommen, wann sich die ComboBox in der jtable ändert.

Sowas in der Art "benachrichtige mich wenn der ItemListener der JTable anspring"
 

hesk

Erfahrenes Mitglied
Habe mir das Prinzip von Observer und Observable durchgelesen. Klingt nach dem was ich suche.

Leider ist meine JTable so definiert:

Java:
public class JTableFilterHeader extends JTable implements ItemListener

Wie kann ich diese nun Observable machen?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

ganz fix eine Idee (evtl gibts da bessere Lösungen), so als Denkanstoß:

Java:
public class Test extends JTable implements ItemListener {
	private MyObservable observable_obj = new MyObservable();

	public void itemStateChanged(ItemEvent e) {
		observable_obj.setChanged();
		observable_obj.notifyObservers(e);
	}
	
	public void addObserver(Observer o) {
		observable_obj.addObserver(o);
	}
	
	public void deleteObserver(Observer o) {
		observable_obj.deleteObserver(o);
	}
}

class MyObservable extends Observable {
  public synchronized void setChanged() {
    super.setChanged();
  }
}
Vorlage / Quelle: java2s.com

Gruß
BK
 
Zuletzt bearbeitet: