GUI-Elemente und Werteaustausch

Status
Nicht offen für weitere Antworten.

Galaktika

Mitglied
Hm, hallo meine Frage hat zwar mit GUI's zu tun, denke sie passt in dieses forum trotzdem rein. Also folgende Annahme (rein theoretisch):
Es existiert ein JFrame Gui, dieser JFrame beinhaltet 2 spezielle JPanel (z.B. Klassen XPanel und YPanel). Jetzt ist auf dem XPanel z.B. ein JSlider. Mir gehts nun um folgendes, wenn ich YPanel z.B. den Wert von dem JSlider aus dem XPanel mitteilen möchte, wie mache ich das dann am besten? Sollte ich dem YPanel über den Konstruktor oder ner Set Methode das betreffende XPanel Objekt übergeben, und in diesem eine Methode bereitstellen um den Wert abzufragen? Oder wäre es anders herum besser, in dem das XPanel ein YPanel erhält und beim loslassen des JSlider der Wert an das YPanel übergeben wird?

Ich frage mich prinzipiell ob das der richtige Ansatz ist. Ich habe auch mal kurz angedacht ob in dem oben beschriebenen Fall nicht der JFrame das ganze steueren sollte.

Was meint ihr?
 
M

macfreakz

Gast
Meine Lösung war immer so:

Ich lege eine Klasse namens "NotificationCenter" an. Und danach eine Interface namens Notificable mit einer Methode: updateData(Daten oder so) oder so! NotificationCenter MUSS ein SingleTon sein! Es enthält "updateAllPanel" Methode oder so ... drin werden allen registierte Panels gesagt, dass sie die Methode updateData() ausführen sollen!

Diese Inferface soll jede Klasse implementieren. Die Methode soll die Daten updaten.

NotificationCenter verwaltet alle Notificable Objekte und steuert die Datentransporte zwischen mehrere Objekte ...

Dies ist nur die Grundlage, du könntest die Funktion eines NotificationCenter erweitern und daraus ein mächtiges Tool erzeugen... viel Spass damit!
 
M

macfreakz

Gast
@deathbyaclown: deine Zusammenfassung zur "DesignPatters" ist echt spitze! Stimmt, es gibt schon fertige Klasse namens Observer! Habe bis jetzt immer eigene Implementation benutzt, jetzt könnte ich endlich Arbeit vereinfachen :)
 

Galaktika

Mitglied
Hi, das ging ja wieder prompt. Schon mal danke. Also ok, ich hab mir das Tut mal angesehen. Bin mir aber nicht sicher ob ich es verstanden habe, bzw. weiß nicht so recht wie ich dann ein neues Problem lösen soll.
Müsste es in meinem Beispiel dann so sein, das X und YPanel so aussähen :
Code:
//soll Veränderungen anzeigen und deshalb beobachten
public class YPanel extends JPanel implements Observer
...
//hier geschen Veränderungen die beobachtet werden
public class XPanel extends JPanel,Observable implements ChangeListener
...

Aber wie ihr schon seht kann XPanel ja schlecht von 2 Klassen erben. Was mach ich also nun? Eine "Zwischenklasse" einbauen die in XPanel verändert wird und von Observable erbt?
 
N

Niki

Gast
wie schon oben erwähnt kannst du das ganze mit dem Observer Interface machen, ich verwende jedoch meistens einen PropertyChangeSupport, bei dem du deine Komponenten registrierst, und dieser PropertyChangeSupport feuert Events an die registrierten Komponenten, so müssen sich die beiden Panels nicht kennen, sonder der eine Panel registriert sich als PropertyChangeListener beim anderen Panel und der feuert dann Events. Könnte wie folgt aussehn:

Code:
    public class PanelX extends JPanel implements PropertyChangeListener{

        public void propertyChanged(PropertyChangeEvent e){
            //.....irgendwas tun.....
        }

    }

    public class PanelY extends JPanel{

        public static final String PROP_IRGENDEIN_EVENT = "IRGENDEIN_EVENT";

        private PropertyChangeSupport pcs = null;

        public PanelY(){
            pcs = new PropertyChangeSupport(this);
        }

        public void addPropertyChangeListener(PropertyChangeListener l){
            this.pcs.addPropertyChangeListener(l);
        }

        public void removePropertyChangeListener(PropertyChangeListener l){
            this.pcs.removePropertyChangeListener(l);
        }

        public void tuIrgendwas(){
            pcs.firePropertyChangeEvent(PanelY.PROP_IRGENDEIN_EVENT, oldValue, newValue);
        }


    }

    public class MyFrame extends JFrame{

        public MyFrame(){
            PanelX xPanel = new PanelX();
            PanelY yPanel = new PanelY();

            yPanel.addPropertyChangeListener(xPanel);

            //......gui aufbauen......
        }

    }
 

Galaktika

Mitglied
Hm, es scheint mehr als ein Weg nach Rom zu führen. Ich glaub es hat jetzt beim 2. Hin sehen bei mir geschnackelt. Ich habs jetzt so gemacht:
Code:
/******************************************1**************************************/
import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JFrame;

public class Gui extends JFrame implements Observer
{
	private Container content;
	private XPanel xp;
	private YPanel yp;
	private XPanelModel xpModel;

	Gui(String title)
	{
		super(title);
		content = getContentPane();
		content.setLayout(new BorderLayout());
		initElements();
		
	}
	private void initElements() 
	{
		xpModel = new XPanelModel();
		content.add(xp = new XPanel(xpModel),BorderLayout.CENTER);
		xpModel.addObserver(this);
		content.add(yp = new YPanel(),BorderLayout.NORTH);
	}
	public void update(Observable arg0, Object arg1) 
	{
		if(arg0.equals(xpModel));
			yp.updateDisplay(arg1.toString());
	}
	public static void main(String[] args) 
	{
		Gui gui = new Gui("Test");
		gui.pack();
		gui.setVisible(true);
	}
}

/******************************************2**************************************/
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class XPanel extends JPanel implements ChangeListener
{
	private JSlider slider;
	private XPanelModel model;
	
	public XPanel(XPanelModel modelPara)
	{
			slider = new JSlider();
			model = modelPara;
			slider.addChangeListener(this);
			add(slider);
	}

	public void stateChanged(ChangeEvent arg0) 
	{
		if(!slider.getValueIsAdjusting())
		{
			model.setValue(slider.getValue());
		}
	}
}

/******************************************3**************************************/
import java.util.Observable;

public class XPanelModel extends Observable
{
	private int value;
	
	XPanelModel()
	{
		value=-1;
	}
	public void setValue(int newValue)
	{
		value=newValue;
		setChanged();
		notifyObservers(new Integer(value));
	}
}

Der Bequemlichkeit halber habe ich Controller und Observer zusammen gelegt. Danke noch mal an alle für eure hilfe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Elemente statisch anordnen AWT, Swing, JavaFX & SWT 4
G ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
J JavaFX JavaFX Elemente an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 5
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
sandaime Swing 3 JComboBoxen ausgelesen Elemente einzel ausgeben AWT, Swing, JavaFX & SWT 6
M JavaFX GUI-Elemente erstellen, nachdem die GUI geladen hat AWT, Swing, JavaFX & SWT 4
TheJavaKid JavaFX Elemente positionieren AWT, Swing, JavaFX & SWT 2
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
D JavaFX Elemente aus VBox unterscheiden AWT, Swing, JavaFX & SWT 1
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
wolfgang63 JavaFX Elemente einer Group entfernen AWT, Swing, JavaFX & SWT 1
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
O Ähnliche GUI Elemente - vererbung?! AWT, Swing, JavaFX & SWT 0
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
T Alle Swing-Elemente anzeigen AWT, Swing, JavaFX & SWT 9
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
K LayoutManager Wieso verschwinden Elemente? AWT, Swing, JavaFX & SWT 20
M JFrame + JNA/aero modul - GUI Elemente so möglich? AWT, Swing, JavaFX & SWT 28
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6
S JVM von Oracle/Sun soll für AWT/SWING Elemente die die Optimierungen der NVidia Treiber verwenden AWT, Swing, JavaFX & SWT 3
C Swing JFrame nimmt keine anderen Elemente auf AWT, Swing, JavaFX & SWT 13
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
L ID für GUI Elemente generieren AWT, Swing, JavaFX & SWT 11
C SWT-Elemente an View-Fenster angleichen und automatisch resizen AWT, Swing, JavaFX & SWT 3
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
P Elemente im Kreis aufstellen AWT, Swing, JavaFX & SWT 5
G Swing Elemente aus Arraylist auf JFrame anzeigen AWT, Swing, JavaFX & SWT 9
G GUI Elemente aus NetBeans verwenden AWT, Swing, JavaFX & SWT 8
L SWT tree elemente markieren AWT, Swing, JavaFX & SWT 4
C Swing Elemente in JList sortieren AWT, Swing, JavaFX & SWT 2
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
S JTree Elemente nach BaumLevel abspeichern AWT, Swing, JavaFX & SWT 2
S JTree & JComboBox - Elemente übers Fenster hinaus anzeigen AWT, Swing, JavaFX & SWT 9
F JScrollPane überlagert andere Elemente AWT, Swing, JavaFX & SWT 5
S Swing UI-Elemente ordnen sich ungewollt in einer Reihe (ohne Layout) AWT, Swing, JavaFX & SWT 5
K Swing Elemente auf Zeichenfeld verschieben AWT, Swing, JavaFX & SWT 8
S Mit eigener Klasse auf GUI-Elemente zugreifen AWT, Swing, JavaFX & SWT 3
E Swing JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an AWT, Swing, JavaFX & SWT 5
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
E Swing JList zur Laufzeit hinzugefügt elemente nicht sichtbar?! AWT, Swing, JavaFX & SWT 2
S Swing Elemente einer JList Farbig hinterlegen AWT, Swing, JavaFX & SWT 6
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
M Swing Von einem Controller aus View-Elemente ändern AWT, Swing, JavaFX & SWT 11
T DND mit JList Elemente nicht am Ende einfügen AWT, Swing, JavaFX & SWT 3
Tobse Swing JList elemente hinzufügen AWT, Swing, JavaFX & SWT 4
K JLayeredPane Elemente auf gleicher Position AWT, Swing, JavaFX & SWT 7
D Elemente werden nicht angezeigt AWT, Swing, JavaFX & SWT 2
W jComboBox unterschiedlich selectable elemente AWT, Swing, JavaFX & SWT 7
M Elemente in JTabbedPane platzieren AWT, Swing, JavaFX & SWT 7
N Swing JList Elemente ausgeben fehlerhaft AWT, Swing, JavaFX & SWT 4
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
B Swing Problem beim Elemente zu JList hinzufügen AWT, Swing, JavaFX & SWT 5
C (Swing)GUI-Elemente werden nicht aktualisiert. AWT, Swing, JavaFX & SWT 2
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
M Swing JList - Elemente umbenennen? AWT, Swing, JavaFX & SWT 4
MrMilti Gezeichnete Java2D Elemente mit Events versehen AWT, Swing, JavaFX & SWT 3
H [gelöst] Swing Elemente verdecken AWT, Swing, JavaFX & SWT 14
B In externer Eventhandlerklasse auf GUI-Elemente zugreifen AWT, Swing, JavaFX & SWT 3
K BoxLayout skaliert die "falschen" Elemente AWT, Swing, JavaFX & SWT 5
A SWT - Elemente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
S Andere Elemente in JComboBox anzeigen AWT, Swing, JavaFX & SWT 2
T Elemente werden nicht direkt angezeigt AWT, Swing, JavaFX & SWT 3
S Nachträglich Swing-Elemente in JFrame erzeugen AWT, Swing, JavaFX & SWT 18
K Titel für eingebundene Elemente wie JPanel AWT, Swing, JavaFX & SWT 3
F Dynamische Swing Elemente AWT, Swing, JavaFX & SWT 10
B Grafische Anordnung der Elemente AWT, Swing, JavaFX & SWT 2
S JComboBox zeigt beim 1. öffnen nur 2 Elemente ? AWT, Swing, JavaFX & SWT 9
J LayoutManager der Elemente untereinander anordnet. AWT, Swing, JavaFX & SWT 11
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
G JButton und andere J-Elemente: Markierung ausblenden AWT, Swing, JavaFX & SWT 6
Paule alle Elemente eines SWT Trees AWT, Swing, JavaFX & SWT 8
S List Elemente AWT, Swing, JavaFX & SWT 4
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
E GUI-Elemente aus txt- oder xml-File erstellen? AWT, Swing, JavaFX & SWT 5
J FAQ programmieren, welche Swing-Elemente AWT, Swing, JavaFX & SWT 7
M Elemente hängen dicht aufeinander AWT, Swing, JavaFX & SWT 2
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
DEvent Je nach Auswahl in Liste entsprechende Input-Elemente anzeig AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben