2016-06-29 12 views
3

Hallo Leute des Internets. Ich bin in einer Situation, wo ich eine GUI erstellen muss, um Objekte verschiedener Klassen zu erstellen, und ich möchte dies auf generische Weise tun. Genauer gesagt besteht das ganze Konzept darin, verschiedene Produkte für einen Laden zu schaffen. In diesem Beispiel sind Produktkategorien Notebooks und Stifte. Nachdem Sie eine Produktkategorie aus einer Liste ausgewählt haben, wird ein JFrame-Formularfenster angezeigt, in dem der Benutzer aufgefordert wird, genauere Angaben zum Produkt zu machen.Sollte ich eine Datenklasse von ihrer Java Swing GUI trennen?

Nicht alle Produkte erfordern jedoch die gleichen Daten. Nehmen wir an, wir haben eine Notebook-Klasse, die die Seitennummer als Integer benötigt, und eine Pen-Klasse, die die Stiftfarbe als String benötigt. Offensichtlich müssen wir die Erstellung dieses Fensters für jeden Produkttyp unterschiedlich handhaben.

Also meine Frage ist, wo soll ich mit der Erstellung dieses Fensters umgehen? Ist es in Ordnung, in jeder Datenklasse eine Methode zu erstellen, die einen vollständigen JFrame der benötigten Form erzeugt, oder sollte ich die Datenklassen separat behandeln?

Vielen Dank im Voraus!

Antwort

5

Sie würden nicht wollen, dass GUIs mit diesen Klassen verwoben werden. Es ist wahrscheinlich eine gute Idee, sich MVC anzuschauen. Model-View-Controller.

Die Idee ist, dass Ihre GUI von Ihrem Modell getrennt ist, mit einem Controller dazwischen, der mit dem Verschieben von Daten von und zu Ihrer GUI befasst ist. Es gibt zwei gängige Varianten davon, ob das Modell die View darüber informieren soll, dass es neue Daten hat, die verfügbar sind, oder dass das Modell den Controller erneut anpingt und dass der Controller dann die Ansicht dieser neuen Daten benachrichtigt.

Dies ist ein architecture pattern. Sie bieten einige Lösungen zu häufig Probleme in Software Engineering auftreten, und es ist eine gute Idee, auf sie zu lesen :-)

+0

Vielen Dank für Ihre schnelle Antwort! Also sollte ich GUI nicht in meine Modellklassen einbeziehen, aber ich weiß immer noch nicht, wo es am besten ist, damit umzugehen. Ich muss immer noch ein Stück Code implementieren, das sagt: "Wenn Sie ein Notebook sind, benutzen Sie dieses Formular", und dies innerhalb der GUI-Klasse zu tun, scheint ein schlechter Ansatz zu sein. Was würden Sie mir in diesem Fall vorschlagen? – Thanos

+0

Wenn man bedenkt, dass es sich um eine Swing-Anwendung handelt, könnte ich verschiedene Panels erstellen, die von einem Standard-JPanel mit einigen gemeinsam genutzten Informationen erben. Zum Beispiel "BookPanel, PenPanel". Sie können dann ein neues Standardfenster erstellen (als Popup oder wie gewünscht), das je nach Auswahl des Benutzers das richtige Panel lädt. Das PenPanel wird dann einen Controller haben, der die korrekten Daten aus dem Modell holt. ODER; Sie könnten ein wirklich flexibles Panel haben, das den Controller fragt "Welche Klasse bin ich bestanden, ein Buch oder Stift? Basierend auf diesen Informationen, bauen Sie den Inhalt des Panels –

+0

Vielen Dank für Ihre Hilfe! Ich werde Ihre Logik folgen – Thanos

3

Verwenden MVC (Model-View-Controller), welches ein Architekturmuster die verwendet wird, zu trennen Die Daten von der Benutzeroberfläche, die Daten (Methoden, die Sie benötigen etc ..) sollten in das Modell eingefügt werden, die Ansicht behandelt Ihre Interface-Komponenten (Panels, Frames etc ...), und der Controller bezieht Eingaben von der Ansicht auf Ihre Daten im Modell.

In Ihrem Fall sollten Sie, wenn Sie ein Notebook-Objekt haben, den Controller benachrichtigen, der dann die Benutzeroberfläche benachrichtigt, die das erforderliche Formular für Sie anzeigt.