Komponenten eines JPanels übergeben

Hallo,

also ich ab da ein kleines Problem. In unten angehängter Klasse erstelle ich einen JFrame in den ich dann mehrere JPanels einfüge die über die aufgerufenen Klassen (die jeweils von JPanel erben) erstellt werden. Das klappt so auch…Auf jeden Fall bekomm ich den JFrame mit den JPanels angezeigt ;-).

Allerdings sollen die eingegebenen Daten halt auch irgendwo gespeichert werden…Dafür wollte ich halt die ganzen Components an meine ButtonPanel-Klasse bzw. dann weiter an den ActionListener geben. Hier kommt jetzt mein Problem.

ich bekomme es einfach nicht hin, dass ich dann auf die einzelnen Components der JPanels zugreifen kann.

Ich hab zum reproduzieren des Problems einfach mal die Methode test erstellt, der ich einfach ein JPanel übergeben habe. Leider ist das Array fields…LEER :eek:.

Ich befürchte, dass ich einfach nur einen ganz blöden Denkfehler irgendwo hab…

Danke im Voraus.


import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DiveLogGUI {
	
	JFrame diveLogFrame;
	
	public DiveLogGUI() {
		diveLogFrame = new JFrame("DiveLog");
		diveLogFrame.setLayout(new GridLayout(3, 2));
		
		DiveLocationPanel diveLocationPanel = new DiveLocationPanel();
		diveLogFrame.add(diveLocationPanel.createDiveLocationPanel());
		
		WaterPanel waterPanel = new WaterPanel();
		diveLogFrame.add(waterPanel.createWaterPanel());
		
		DivePanel divePanel = new DivePanel();
		diveLogFrame.add(divePanel.createDivePanel());
		
		DiveEquipmentPanel diveEquipmentPanel = new DiveEquipmentPanel();
		diveLogFrame.add(diveEquipmentPanel.createDiveEquipmentPanel()); 

		JPanel dummyPanel = new JPanel();
		diveLogFrame.add(dummyPanel);

		ButtonPanel buttonPanel = new ButtonPanel();
		diveLogFrame.add(buttonPanel.createButtonPanel(diveLogPanels));
				
		diveLogFrame.setSize(800, 800);
		diveLogFrame.setVisible(true);
		diveLogFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		diveLogFrame.pack();

		test(diveLocationPanel);
	}

	public void test(JPanel diveLocationPanel){
		Component[] fields = diveLocationPanel.getComponents();
		for(Component field : fields){
			System.out.println(field.getName());
		}
	}
}



Aaarg, hab das mal wieder gelöscht…

Ob das so geschickt ist:

Allerdings sollen die eingegebenen Daten halt auch irgendwo gespeichert werden…Dafür wollte ich halt die ganzen Components an meine ButtonPanel-Klasse bzw. dann weiter an den ActionListener geben.

Du solltest lieber versuchen, direkt auf die Komponenten zuzugreifen, die Daten aus den Textfeldern u.ä. holen und in einem Model speichern.

Hmm… ich glaub, das versteh ich jetzt nicht wirklich :/. Also haette ich dann z. B. ein Objekt diveLocation mit dem ich dann auf die Komponenten (oder besser gesagt die passenden getter) des Panels zugreife?

Hätte nicht gedacht, dass das so “Aufwändig” wird ;-). Sonst hätte ich mir als erstes “kleines” Projekt leiber was anderes gesucht. Aber jetzt bin ich dran…

*** Ich hab mir das grade nochmal genau angeugckt… Mein Fehler ist, dass ich mich viel zu sehr auf die GUI konzentriert hab. Ich glaube, so langsam versteh ich, was du meinst :-).

Danke schonmal für deine Tips.

Gruß

Paddie

In deinen eigenen JPanel Klassen befinden sich aber schon noch weitere Komponenten mit Inhalten oder?

Wenn du die Klassenaufteilung so beibehalten willst, kannst du in deinen JPanel Klassen die Komponenten, die du später abfragen willst, als Objektvariablen definieren und getter-Methode für jede Komponente erstellen und sie dann so abfragen.

Was beinhalten denn deine ganzen JPanels? Vllt ist es gar nicht nötig eigene Klassen von JPanel abzuleiten

da sind jeweils ein paar JTextFields, JButtons usw drin.

Wenn du die Klassenaufteilung so beibehalten willst, kannst du in deinen JPanel Klassen die Komponenten, die du später abfragen willst, als Objektvariablen definieren und getter-Methode für jede Komponente erstellen und sie dann so abfragen.

DAS hab ich in separate Klassen ausgelagert.

Was beinhalten denn deine ganzen JPanels? Vllt ist es gar nicht nötig eigene Klassen von JPanel abzuleiten

[/QUOTE]

siehe oben. in den Klassen sind nur normale Swing-Komponenten die ich mit dem Formlayout angeordnet hab.

Ich dachte eigentlich ich teile die Sache auf, so dass ich einmal die Klassen hab in denen ich die JPanels für die GUI erstelle und dann andere Klassen, wo ich dann die Objekte (mit den Daten aus dem jeweiligen Panel) erstelle… HIER lag wohl auch mein Denkfehler… ich wollte die Daten an meinen anderen Klassen „vorbei“ speichern, ohne vorher Objekte damit zu erstellen. Ich weiß wirklich nicht, was mich da geritten hat.

Danke

Paddie

*** Edit ***

OK, also ich hab jetzt den ganzen Nachmittag rumprobiert, allerdings komm ich auf keinen grünen Zweig…Wenn ich ja mit den Eingaben ein Objekt „befüllen“ will, muß ich ja erstmal mit einem Actionlistener die Felder abfragen was ich allerdings nicht hinbekomme.

Da ich an dem Problem jetzt schon bestimmt 3 oder 4 Wochen (nicht nonstop ;-)) und gestern und heute eigentlich fast den ganzen Tag hänge ohne auch nur nennenswert weiter zu kommen…Ist mir irgendwie klar geworden, dass das Programmieren wohl doch nicht so das richtige für mich ist…Mir fehlt irgendwie das „passende Denken“ für die ganze Sache. Ich habe aber auch keine Lust, mir wie gewisse andere (die im anderen Forum aktiv sind) alles vorkauen bzw fertig servieren zu lassen. Entweder ich verstehe was ich mache oder ich lass es sein…

Auch wenn keine wirkliche Lösung (zumindest für mich) hier rauskam, werd ich jetzt trotzdem mal den Thread als gelöst markieren.

Danke nochmals für die Hilfeversuche :wink:

Gruß

Paddie

*** Edit ***

SO, wieso auch immer, aber der Text da oben landet immer als EDIT in meinem vorigen Post, obwohl ich auf Antworten geklickt hab…

[ot]Wenn niemand vor deinem nächsten Posting geantwortet hat, werden deine folgenden Beiträge von der Forensoftware zusammengelegt. Also alles in Ordnung. ;)[/ot]

Ich kenn zwar das Formlayout nicht, aber so wie du das beschreibst seh ich keinen Grund extra JPanel-KLassen zu erstellen. Das könntest du auch alles schön von außen durchführen mit mehreren JPanel Objekten und dann alle Komponenten darauf setzen.

Es mag sein dass du eine falsche Vorstellung davon hast wie GUI-Programmierung in Java funktioniert, aber das Problem lässt sich lösen. Es gibt haufenweise GUI-Tutorials online mit denen man einen ersten Einblick bekommt. Eine weitere wichtige Anlaufstelle wenn du ne Frage bezüglich Java hast ist natürlich die Insel, quasi die Javabibel, komplett kostenlos online erhältlich und natürlich kannst du jederzeit hier im Forum nachfragen wenn dir was unklar ist.

Deswegen: Nicht so schnell aufgeben, wär doch langweilig wenns einfach wär;)