Ich entwickle eine Anwendung, die Bilder anzeigt und Sounds aus einer Datenbank wiedergibt. Ich versuche zu entscheiden, ob ein separater JFrame zum Hinzufügen von Bildern zur Datenbank über die GUI verwendet werden soll.
Ich frage mich nur, ob es sinnvoll ist, mehrere JFrame-Fenster zu verwenden.
Ich frage mich nur, ob es sinnvoll ist, mehrere JFrames zu verwenden.
Schlechte (schlechte, schlechte) Praxis.
Es gibt eine beliebige Anzahl von Möglichkeiten, um viele Elemente in einer GUI anzuzeigen, z.
CardLayout
(kurz Demo. ). Gut für:JInternalFrame
/JDesktopPane
wird normalerweise für MDI verwendet.JTabbedPane
für Gruppen von Komponenten.JSplitPane
Eine Möglichkeit, zwei Komponenten anzuzeigen, deren Wichtigkeit zwischen den beiden Komponenten (die Größe) je nach dem, was der Benutzer tut, variiert.JLayeredPane
weit viele gut geschichtete Komponenten.JToolBar
enthält normalerweise Gruppen von Aktionen oder Steuerelementen. Kann auf der Benutzeroberfläche verschoben oder ganz nach Bedarf entfernt werden. Wie oben erwähnt, wird minimiert/wiederhergestellt, je nach übergeordnetem Element.JList
(einfaches Beispiel unten).JTree
.Wenn diese Strategien für einen bestimmten Anwendungsfall nicht funktionieren, versuchen Sie Folgendes. Stellen Sie ein einzelnes Haupt-JFrame
her und lassen Sie dann JDialog
oder JOptionPane
Instanzen für den Rest des Free Floating erscheinen Elemente, wobei der Rahmen als übergeordnetes Element für die Dialogfelder verwendet wird.
In diesem Fall, in dem die mehreren Elemente Bilder sind, ist es besser, stattdessen eine der folgenden Optionen zu verwenden:
JLabel
(in einem Bildlauffenster zentriert), um das Bild anzuzeigen, an dem der Benutzer gerade interessiert ist. Wie in ImageViewer
gesehen.JList
. Wie in diese Antwort gesehen. Der einreihige Teil davon funktioniert nur, wenn sie alle die gleichen Dimensionen haben. Alternativ, wenn Sie bereit sind, die Bilder im Handumdrehen zu skalieren und alle dasselbe Seitenverhältnis haben (z. B. 4: 3 oder 16: 9).Ich möchte dem "nicht benutzerfreundlichen" Argument ein Beispiel entgegensetzen, an dem ich gerade beteiligt war.
In unserer Anwendung haben wir ein Hauptfenster, in dem die Benutzer verschiedene "Programme" als separate Registerkarten ausführen. Wir haben so viel wie möglich versucht, unsere Anwendung auf dieses einzelne Fenster zu beschränken.
Eines der von ihnen ausgeführten Programme enthält eine Liste der vom System generierten Berichte. Der Benutzer kann in jeder Zeile auf ein Symbol klicken, um ein Dialogfeld zur Berichtsanzeige zu öffnen. Dieser Viewer zeigt das Äquivalent der A4-Seiten im Hoch-/Querformat des Berichts an, sodass die Benutzer dieses Fenster als recht groß ansehen und fast ihren gesamten Bildschirm ausfüllen möchten.
Vor ein paar Monaten erhielten wir von unseren Kunden Anfragen, diese Report Viewer-Fenster modeln zu lassen, damit sie mehrere Berichte gleichzeitig öffnen können.
Einige Zeit widerstand ich dieser Bitte, da ich dies nicht für eine gute Lösung hielt. Meine Meinung wurde jedoch geändert, als ich herausfand, wie die Benutzer dieses "Defizit" unseres Systems umgehen.
Sie öffneten einen Viewer und verwendeten die Funktion "Speichern unter", um den Bericht als PDF in einem bestimmten Verzeichnis zu speichern. Mit Acrobat Reader wurde PDF) geöffnet Das Gleiche gilt für den nächsten Bericht. Auf ihnen werden mehrere Acrobat Reader mit den verschiedenen Berichtsausgaben ausgeführt, die sie anzeigen möchten.
Also gab ich nach und machte den Betrachter zur Modeless. Dies bedeutet, dass jeder Viewer über ein Taskleistensymbol verfügt.
Als letzte Woche die neueste Version für sie veröffentlicht wurde, ist die überwältigende Antwort von ihnen, dass sie es LIEBEN. Dies ist eine unserer beliebtesten Verbesserungen in letzter Zeit.
Also sagen Sie Ihren Nutzern, dass das, was sie wollen, schlecht ist, aber letztendlich wird es Ihnen keinen Gefallen tun.
EINIGE NOTIZEN:
ModalityType
und nicht das boolesche modal
Argument verwenden. Dies gibt diesen Dialogen das Taskleistensymbol.Machen Sie einen jInternalFrame zum Hauptrahmen und machen Sie ihn unsichtbar. Dann können Sie es für weitere Veranstaltungen nutzen.
jInternalFrame.setSize(300,150);
jInternalFrame.setVisible(true);
Es ist schon eine Weile her, dass ich Swing das letzte Mal berühre, aber im Allgemeinen ist es eine schlechte Übung, dies zu tun. Einige der wichtigsten Nachteile, die in den Sinn kommen:
Es ist teurer: Sie müssen viel mehr Ressourcen zuweisen, um einen JFrame zu zeichnen, der eine andere Art von Fenstercontainer ist, z. B. Dialog oder JInternalFrame.
Nicht benutzerfreundlich: Es ist nicht einfach, in eine Reihe von zusammengeklebten JFrame-Anwendungen zu navigieren. Ihre Anwendung scheint eine Reihe von Anwendungen zu sein, die inkonsistent sind und ein schlechtes Design aufweisen.
Es ist einfach, JInternalFrame zu verwenden Das ist etwas retorisch, jetzt ist es viel einfacher und andere Leute sind schlauer (oder haben mehr Freizeit), als wir es uns bereits überlegt haben, und ich würde es empfehlen benutze es.
Auf jeden Fall schlechtes Training. Ein Grund dafür ist, dass es nicht sehr benutzerfreundlich ist, weil in jedem JFrame
ein neues Taskleistensymbol angezeigt wird. Wenn Sie mehrere JFrame
s steuern, werden Sie sich die Haare ausreißen.
Persönlich würde ich EIN JFrame
für Ihre Art der Anwendung verwenden. Es liegt an Ihnen, wie Sie mehrere Dinge anzeigen, es gibt viele. Canvas
es, JInternalFrame
, CardLayout
, möglicherweise sogar JPanel
s.
Mehrere JFrame-Objekte = Schmerz, Ärger und Probleme.
Ich halte die Verwendung mehrerer Jframe
s nicht für eine gute Idee.
Stattdessen können wir JPanel
s mehr als ein oder mehrere JPanel
im selben JFrame
verwenden.
Wir können auch zwischen diesen JPanel
s wechseln. Es gibt uns also die Freiheit, mehr als nur eine Sache im JFrame
anzuzeigen.
Für jedes JPanel
können wir verschiedene Dinge entwerfen und all dies JPanel
kann auf dem einzelnen JFrame
on zu einem Zeitpunkt angezeigt werden.
Um zwischen diesen JPanel
s zu wechseln, verwenden Sie JMenuBar
mit JMenuItems
für jeden JPanel
oder 'JButtonfor each
JPanel`.
Mehr als ein JFrame
ist keine gute Praxis, aber es ist nichts falsch, wenn wir mehr als ein JFrame
wollen.
Aber es ist besser, einen JFrame
für unsere unterschiedlichen Bedürfnisse zu ändern, als mehrere JFrame
zu haben.
Wenn die Frames dieselbe Größe haben, erstellen Sie den Frame und übergeben Sie ihn stattdessen als Referenz.
Wenn Sie den Frame durchlaufen haben, können Sie entscheiden, wie Sie ihn füllen möchten. Es wäre, als hätte man eine Methode zur Berechnung des Durchschnitts einer Zahlenmenge. Würden Sie die Methode immer wieder erstellen?
Es ist keine gute Übung, aber obwohl Sie es verwenden möchten, können Sie das Singleton-Muster als gut verwenden. Ich habe die Singleton-Muster in den meisten meiner Projekte verwendet.