Observer-Pattern bei JPanel nicht möglich?

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hallo,

ich versuche hier gerade eine schöne Lösung dafür zu finden, wie ich in meinem Spiel die Grafik darstellen kann.
Da hab ich jetzt an das Observer Pattern gedacht: Das Model benachrichtigt meine View, wenn sich was geändert hat.

Ich hab ja jetzt aber ein JPanel, auf dem ich Zeichnen muss. Und ich glaub ich hab grad ne Blockade, weil irgendwie
bin ich grad der Meinung dass ich das Observer Pattern hier gar nich anwenden kann.

Das Ding ist:

ich hab ja dann meine update(Observable obs, Object o) Methode in meiner View, wo ja auch das JPanel drin liegt.
Aber egal wie ich das jetz dreh und wende: Gezeichnet wird in der paintComponent(Graphics g), und ich kann
dieser Methode das Model nicht übergeben, bzw. weiss nicht wie.

Was ich meine ist, innerhalb dieser Methode muss ja dann auf das Model zugegriffe werden, um die Objekte
entsprechend zu malen. Da ich der paintComponent() das Model nicht als Parameter geben kann, muss
es irgendwo in der Klasse deklariert sein als Attribut. Und wenn das so ist, ist doch die ganze Idee des
OBserver-Pattern hin.


Hoffe is verständlich wo ich grad häng... Frage ist: Wie krieg ich das Model aus der update() Methode in die
paintComponent() Methode? Ich könnte das Pattern anwenden wenn meine View aus Labels oder sowas
besteht, aber nicht biem JPanel, weil ich diese paintcomponent überschreiben muss irgendwie, und der
mein Model nich geben kann

Und auch wenn nicht: Stimmt es, das dann hier dieses Pattern unangebracht ist, oder verwende ich das nur falsch?

Thx
 

Wildcard

Top Contributor
Die View hat durchaus eine Referenz auf das Model, das ist nicht ungewöhnlich (es sei denn man verwendet Wrapper um die Daten zwischen View und Model zu koppeln).
Wichtig ist primär, dass das Model die View nicht kennt.
 

hdi

Top Contributor
Achso na dann is okay.

Ich schieb gleich nochma ne kleine Frage rein:

Wie kann ich einen Thread killen? Entweder die Methoden die ich versucht hab schmeissen nur Exceptions und
der Thread läuft weiter, oder sie sind deprecated (sowas wie destroy())

Also wenn man auf "Start" drückt soll n Thread starten, wenn gameover ist, soll er sich killen, damit wenn man
wieder auf Start drückt, ein neuer Thread startet. Aber halt immer nur 1 da ist und sich mit der Zeit nicht hunderte
Ansammeln.

Ich konnte das jetz nur so lösen dass mein Gameloop-Thread IMMER läuft, nur halt wenn grad kein Spiel läuft,
hat er nur ne while(true) schleife in der er immer n wenig pennt. Und wenn ein Spiel losgeht kommt er in einer
weitere innere schleife while(running).

Find ich aber nich so geil gelöst, denn wenn kein Spiel läuft, will ich auch keinen Thread, der CPU Zeit beansprucht. Und wenn ich ihn zulange schlafen lege, reagiert mein Start verzögernd.
 

Murray

Top Contributor
hdi hat gesagt.:
Wie kann ich einen Thread killen?

Threads "killen" geht nicht - die entsprechenden Methoden sind aus gutem Grund deprecated, weil sie unlösbare Probleme aufwerfen.

Normalerweise macht man das so, dass man den Thread eben nicht in einer Endlosschleife (while ( true) ...}) arbeiten lässt, sondern ihm eine Abbruchbedingung verpasst (while( !stopped) { ...}). Wenn der Thread nun beenden werden soll, muss nur noch stopped auf true gesetzt werden und schon verlässt der Thread die Schleife und beendet sich, sobald die run-Methode verlassen wird.

Nähere Erläuterungen dazu findest Du hier.
 

hdi

Top Contributor
Ja so hatte ich es auch, während ich das hier jetzt geschrieben hab is mir auch eingefallen wie ich das
lösen kann.

Nur zum Verständnis, mein Problem is eig. das hier:

wenn die sleep-zeiten jetz nich so gering sind sondern eher grösser, zB 500ms oder sowas, dann
"erwische" ich einen Thread wohl in 99,9% aller Fälle nicht beim arbeiten, denn seine Berechnungen macht er wohl in
<1ms.

Das Spiel is gameover, "stopped" wird auf true gesetzt, der Spieler startet ein neues Spiel, stopped ist wieder false.
Während diesem ganzen Vorgang hat der Thread gepennt, er wacht auf und stopped ist - aus seiner Sicht - "weiterhin" false.

Ich darf halt stopped nich zu ner globalen Variable machen, naja ich krieg das schon hin! Danke für die hilfe
 

Murray

Top Contributor
Du kannst statt Thead#sleep auch Object#wait verwenden. Das hat den Vorteil, dass derjenige, der den Zustand "stopped" umsetzte, in dem Moment per "notifyAll" alle "wait"-Aufrufe unterbrechen kann - man wartet also nur genau so lange, bis das Ereignis eintritt.
 

Ebenius

Top Contributor
Du kannst statt Thead#sleep auch Object#wait verwenden. Das hat den Vorteil, dass derjenige, der den Zustand "stopped" umsetzte, in dem Moment per "notifyAll" alle "wait"-Aufrufe unterbrechen kann [...]
... oder auch jeder andere der das Objekt kennt. (Nur der Vollständigkeit halber)

BTW: Der Thread ist "waiting" und nicht "stopped". Siehe: Thread.State

Grüße, Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Wie mehrere Grafiken auf JPanel anzeigen lassen? (Observer pattern?) AWT, Swing, JavaFX & SWT 24
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
R MVC Observer While-Schleife AWT, Swing, JavaFX & SWT 3
F JavaFX MVC und Observer AWT, Swing, JavaFX & SWT 4
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
O Swing AbstractTableModel - Observer.. AWT, Swing, JavaFX & SWT 14
K Swing und MVC + Observer AWT, Swing, JavaFX & SWT 4
G JTree - Observer oder Listener? AWT, Swing, JavaFX & SWT 6
D ComboBox-Model mit Observer AWT, Swing, JavaFX & SWT 3
D Event in Fenster ausgeben + Observer + kein Plan AWT, Swing, JavaFX & SWT 2
Rudolf AWT Observer mit AWT AWT, Swing, JavaFX & SWT 5
P Observer und GUI Update AWT, Swing, JavaFX & SWT 2
S Observer Problem AWT, Swing, JavaFX & SWT 2
G eigenen Observer schreiben AWT, Swing, JavaFX & SWT 6
F Observer vs Listener AWT, Swing, JavaFX & SWT 2
F Eigener Observer? AWT, Swing, JavaFX & SWT 4
Z Observer/Observable und SWT AWT, Swing, JavaFX & SWT 2
B JavaFX Pattern (Aufteilung Zuständigkeiten AWT, Swing, JavaFX & SWT 7
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Cromewell JavaFX MVC-Pattern AWT, Swing, JavaFX & SWT 7
3 2D-Grafik BasicStroke dash pattern - Linie zu lang!? AWT, Swing, JavaFX & SWT 1
M Welches Pattern bei GUI Anwendungen? AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
C GUI Entwicklung - welches Pattern? AWT, Swing, JavaFX & SWT 16
J Swing Controller im MVC-Pattern AWT, Swing, JavaFX & SWT 9
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
D MVC Pattern in Swing-Applikationen AWT, Swing, JavaFX & SWT 4
A MVC-Pattern - Kreuzweise Anwendung? AWT, Swing, JavaFX & SWT 4
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
kilopack15 JPanel im laufenden Zustand einfärben AWT, Swing, JavaFX & SWT 2
kilopack15 JPanel Farbverwaltung AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
D Von JPanel auf anderes JPanel zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben