Designfrage

swas

Mitglied
Hallo Leute,

ich hab mal eine Designfrage zum folgenden Problem:

Ich habe drei Klassen. Eine Dialog-Klasse mit einem JTabbedPane und zwei Panel-Klassen
die als Tabs für die TabbedPane genommen werden.
Auf Tab-A ist ein Textfeld, auf Tab-B ein Label. Sobald ein Eintrag in das Textfeld erfolgt, soll das Label den Text annehmen und anzeigen.

Ich frage mich gerade: "Wie mache ich das am besten/elegantesten?"

Die einfachste Möglichkeit ist es eine static-Methode im Tab-B zum setzen des Labels zu erstellen. Das ist aber irgendwie sehr unschön.
Meine zweite Idee war es einen Observer zu erstellen. Nur mir stellt sich dabei
die Frage: "Ist das nicht einwenig überzogen?"

Ich würde mich über einige Denkanstöße oder Ideen freuen.

Gruß,
swas
 
Ok, zuerst frage ich mich, wieso hast du für die Panels extra Klassen und machst das nicht alles in einer Klasse? Aber ich vermute du wirst dafür schon deine Gründe haben...

Jedenfalls gehe ich davon aus, dass deine Klassen im groben so aussehen:
Java:
class MyDialog extends JDialog //implements ActionListener
{
	private JTabbedPane tabbedpane;
	private PanelA panela;
	private PanelB panelb;

	public MyDialog()
	{
		tabbedpane = new JTabbedPane();
		panela = new PanelA();
		panelb = new PanelB();
		tabbedpane.addTab("Tab1", panela);
		tabbedpane.addTab("Tab2", panelb);
		getContentPane().add(tabbedpane);
		//panela.getTextField().addActionListener(this);
	}

	//public void actionPerformed(ActionEvent ae)
	//{
	//	panelb.getLabel().setText(panela.getTextField().getText());
	//}
}

class PanelA extends JPanel
{
	private JTextField textfield;

	public PanelA
	{
		textfield = new JTextField();
		add(textfield);
	}

	//public JTextField getTextField()
	//{
	//	return textfield;
	//}
}

class PanelB extends JPanel
{
	private JLabel label;

	public PanelB
	{
		label = new JLabel();
		add(label);
	}

	//public JLabel getLabel()
	//{
	//	return label;
	//}
}

In den Kommentaren steht, wie ich es etwa probieren würde...
 
Zuletzt bearbeitet:
Ich persönlich würde die Observer-Variante nehmen. Ich mag das nicht, wenn Komponenten, die neben einander existieren und eigentlich nix mit einander zu tun haben, gegenseitige Zugriffe für Datenaustausch machen. Dann lieber den selben Datenhintergrund/Model (das zu beobachtende Objekt) verwenden. Zudem wenn die Komponenten die gegenseitigen Zugriffe tätigen und eins davon verschwindet oder ersetzt wird, dann hat man wieder Spaß beim Korrigieren. Man könnte dem zwar durch die Deklaration von entsprechenden Zugriffsinterfaces etwas entgegen kommen, ist aber in meinen Augen auch nicht die feine Englische. Also ich bin für den Observer, ist sinniger, zumindest aus Sicht der Designfrage. Theorie und Umsetzung sind nunmal meist nicht gleich.
 
Hey,

danke eure Antworten.

@HonniCilest:
An die Möglichkeit habe ich jetz natürlich nicht gedacht...

Ich hatte es so gemacht:
Java:
jTabbedPane.addTab(titleTab1, new PanelA());
jTabbedPane.addTab(titleTab2, new PanelB());
Auf die Idee es so zu machen wie du bin ich dadurch gar nicht mehr gekommen.

Ich hab die Tabs in zwei Klassen gezogen, da diese total verschiedene Funktionen haben und in Wirklichkeit viel komplexer werden.

@Akeshihiro:
Ja genau so sehe ich das auch und die Tabs haben (bis auf die Information im Textfeld)
eigentlich nichts miteinander zu tun.
Designtechnisch ist die Observer-Variante die sauberste. Leider konnte mir keiner aus einem Arbeitsumfeld eine ordentliche Antwort auf meine Frage geben.

//Edit:
Außerdem möchte ich noch etwas dazulernen und wer weiß evtl. hat jemand eine Idee auf die ich nie kommen würde. ;)
 
Zuletzt bearbeitet:
Zurück