• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

GUI Forms - Mehrere Fenster in einem Projekt

Z

zlFavourite

Aktives Mitglied
Hallo, ich schreibe ein kleines Java Projekt. In diesem habe ich mehrere Fenster. Das erste ist z.B. mein Login Fenster, bei dem sich der User erst anmelden muss.
Dieser Code wird beim Starten des Projekts ausgeführt und zeigt das Login Fenster an.
Login:
public static void main(String[] args) throws SQLException {
        JFrame frame1 = new JFrame("Login");
        frame1.setContentPane(new Login().panelLogin);
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.pack();
        frame1.setVisible(true);
        frame1.setLocationRelativeTo(null);
        frame1.setSize(400,300);
    }

Nachdem sich der User erfolgreich angemeldet hat, kommt er zur Hauptseite wo er dann auswählen kann was er machen möchte(dort sollen sich dann auch wieder, je nach Wahl, die Fenster öffnen). Das Hauptfenster öffne ich nachdem sich der User angemeldet hat:
Hauptseite öffnen:
JFrame frame1 = new JFrame("Milchverwaltung");

            frame1.setContentPane(new Startpage().panelStart); // Pass this frame (frame1) to Startpage where I set frame1 invisible
            frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame1.pack();
            frame1.setVisible(true);
            frame1.setLocationRelativeTo(null); // Set location to center
            frame1.setSize(400,300);

Meine Frage lautet nun wie ich z.B. das Login Fenster wieder schließen/unsichtbar machen kann wenn sich der User eingeloggt hat. Auf das entsprechende frame kann ich nur zugreifen wenn ich das Frame als param übergebe, ist aber schlecht, da ich die Klasse in der das Login Fenster erzeugt wird noch öfter aufrufe und dort keinen param mitgeben kann.

Mein zweite Frage wäre zu den JFrame. Ich habe gelesen, dass es nicht gut ist mehrere JFrame zu verwenden. Gibt es dafür einen besseren Weg oder eine Alternative?

Vielen Danke im voraus :)
 
J

Joreyk

Bekanntes Mitglied
Java:
package application;

import java.io.File;
import java.net.MalformedURLException;

import javafx.scene.Node;
import javafx.scene.layout.StackPane;

public class GuiSwitchController {
    private static StackPane rootStackPane = new StackPane();;
    private static MainMenueView mainMenue = new MainMenueView();
    private static DeckMenueView deckMenue = new DeckMenueView();
    public static void setStyles() throws MalformedURLException {
        mainMenue.getStylesheets().add(new File("mainMenueView.css").toURI().toURL().toExternalForm());
        deckMenue.getStylesheets().add(new File("styleDeck.css").toURI().toURL().toExternalForm());
    }
    public static StackPane getRootStackPane() {
        return rootStackPane;
    }
    private static void clearRootStackpane() {
        rootStackPane.getChildren().clear();
    }

    public static void exitProgramm() {
        System.exit(0);
        // disconnects from server
    }
    public static void setTheDeckScene() {
        clearRootStackpane();
        rootStackPane.getChildren().add(deckMenue);
    }
    public static void setTheMainScene() {
        clearRootStackpane();
        rootStackPane.getChildren().add(GuiSwitchController.mainMenue);
    }

}
ich kann dir nur code in Javafx anbieten aber die idee sollte eig die Gleiche sein...ein Controller kennt die Verschiedenen fenster und der controller selbst ist ein Layout , von dem nimmst die Children weg( die views ) und setzt dann die neue szene so verlierst du deine Views nicht

somit hast ein Pseudo layout das immer die Views wechselt
somit brauchst auch nur noch 1 JFrame weil du 1 Pseudo Node dazwischen hast dann kannst dir das sparen


KEINE AHNUNG wie das bei dir funktioniert aber die idee sollte so shcon mal klar sein
 
Z

zlFavourite

Aktives Mitglied
Java:
package application;

import java.io.File;
import java.net.MalformedURLException;

import javafx.scene.Node;
import javafx.scene.layout.StackPane;

public class GuiSwitchController {
    private static StackPane rootStackPane = new StackPane();;
    private static MainMenueView mainMenue = new MainMenueView();
    private static DeckMenueView deckMenue = new DeckMenueView();
    public static void setStyles() throws MalformedURLException {
        mainMenue.getStylesheets().add(new File("mainMenueView.css").toURI().toURL().toExternalForm());
        deckMenue.getStylesheets().add(new File("styleDeck.css").toURI().toURL().toExternalForm());
    }
    public static StackPane getRootStackPane() {
        return rootStackPane;
    }
    private static void clearRootStackpane() {
        rootStackPane.getChildren().clear();
    }

    public static void exitProgramm() {
        System.exit(0);
        // disconnects from server
    }
    public static void setTheDeckScene() {
        clearRootStackpane();
        rootStackPane.getChildren().add(deckMenue);
    }
    public static void setTheMainScene() {
        clearRootStackpane();
        rootStackPane.getChildren().add(GuiSwitchController.mainMenue);
    }

}
ich kann dir nur code in Javafx anbieten aber die idee sollte eig die Gleiche sein...ein Controller kennt die Verschiedenen fenster und der controller selbst ist ein Layout , von dem nimmst die Children weg( die views ) und setzt dann die neue szene so verlierst du deine Views nicht

somit hast ein Pseudo layout das immer die Views wechselt
somit brauchst auch nur noch 1 JFrame weil du 1 Pseudo Node dazwischen hast dann kannst dir das sparen


KEINE AHNUNG wie das bei dir funktioniert aber die idee sollte so shcon mal klar sein
Bedeutet ich würde in dem Controller Methoden definieren durch die ich dann die GUI aufrufe oder ?
 
J

Joreyk

Bekanntes Mitglied
1. Deine Main erstellt den Controller der Ruft setLogin auf -> er setzt sich selbst mit dem Login als kind
2. Auf login klick -> der Controller fügt dem Button die Funnktion hinzu das Aktuelle Child des Controllers zu entfernen uund eine andere View als child zu setzen dann kannst dich so durch die views hangeln
 
J

Joreyk

Bekanntes Mitglied
so hast du immer die Struktur
JFrame -> Controller(extends Layout) -> Variable View

KEINE AHNUNG wie das exakt geht ich kann nur javafx

aber die ideen sind die gleichen
 
Z

zlFavourite

Aktives Mitglied
Bedeutet das ganze wäre dann ein MVC Design Pattern.
Danke für die Infos, dann werde ich wohl mein ganzes Projekt neu aufziehen müssen.
 
Z

zlFavourite

Aktives Mitglied
joa schon nur mit der klitzekleinen ausnahme dass der controller selber ein "gui objekt ist " aber den sieht man ja nich und der verändert sich auch nich mehr
Okay. Dann muss ich mal schauen, da ich mir nicht wirklich sicher bin wie ich das umsetze. Wenn ich dann letztendlich ein Controller für mein ganzes Programm habe wird der wahrscheinlich total unübersichtlich, wenn ich zum Schluss für 4 GUI Forms jeweil 10 ActionListener da alleine verarbeiten muss. Verstehst du was ich meine?
 
J

Joreyk

Bekanntes Mitglied
Okay. Dann muss ich mal schauen, da ich mir nicht wirklich sicher bin wie ich das umsetze. Wenn ich dann letztendlich ein Controller für mein ganzes Programm habe wird der wahrscheinlich total unübersichtlich, wenn ich zum Schluss für 4 GUI Forms jeweil 10 ActionListener da alleine verarbeiten muss. Verstehst du was ich meine?
hat der Switch Controller überhaupt was zu tun mit den funktionen der anderen views?
nicht wirklcih..
Du hast 1 SwitchController und jede View hat zusätzlcih einen controller der für den rest zuständig ist
mvc heist ja nicht 1 view 1 controller 1 model...
verbindungen kannst du ja "machen wie du willst"
 
Z

zlFavourite

Aktives Mitglied
hat der Switch Controller überhaupt was zu tun mit den funktionen der anderen views?
nicht wirklcih..
Du hast 1 SwitchController und jede View hat zusätzlcih einen controller der für den rest zuständig ist
mvc heist ja nicht 1 view 1 controller 1 model...
verbindungen kannst du ja "machen wie du willst"
Stimmt da hast du recht. Ich habe jetzt einen SwitchController, der die einzelnen GUI Forms dann bereitstellt. Dafür benutze ich auch nur ein Frame. Dadurch ist es mir aber auch nicht möglich die alte GUI Form von welcher ich praktisch zur neuen Form gewechselt habe wenn der User den Button drückt auf visible false zu setzen.
 
J

Joreyk

Bekanntes Mitglied
du musst mal den Szenen aufbau verstehen sollte denn ein Layout unsichtbar werden ? oder sollte es einfach nicht in der aktuellen GUI dargestellt werden
 
mihe7

mihe7

Top Contributor
und zeigt das Login Fenster an.
Login wäre ein klassischer Fall für einen modalen JDialog.

Meine Frage lautet nun wie ich z.B. das Login Fenster wieder schließen/unsichtbar machen kann wenn sich der User eingeloggt hat.
Das passiert beim modalen Dialog "automatisch", da der Code erst weiter ausgeführt wird, wenn der Dialog mit dem Anwender beendet ist.

Mein zweite Frage wäre zu den JFrame. Ich habe gelesen, dass es nicht gut ist mehrere JFrame zu verwenden. Gibt es dafür einen besseren Weg oder eine Alternative?
Was als unübersichtlich gilt, sind die klassischen Multiple-Document-Interfaces mit mehreren Fenstern, die in einem gemeinsamen Fenster existieren. Das geht unter Swing auch mit JDesktopPane und JInternalWindow -> ekelhaft.

Ansonsten kann man da nichts pauschal behaupten. Wenn Du den Browser nimmst, kannst Du mehrere Browserfenster haben und/oder mehrere Tabs im Browser öffnen. Auch das ist beides mit Swing möglich (JFrame und JTabbedPane, wobei man da auf Libs zurückgreifen sollte, um closeable Tabs zu bekommen). In OpenOffice bekommst Du für jedes Dokument ein eigenes Fenster. In früheren Word-Versionen war es, wenn ich mich recht entsinne, ein Fenster mit mehreren Dokumenten, von denen in der Regel aber eines das Fenster füllte.

Dann gäbe es auch die Möglichkeit, "Formulare" in einem Fenster auszuwechseln. Hier käme dann das CardLayout in Frage.

Du siehst, Wege gibt es ausreichend, man muss sich nur überlegen, wo man hin will. Am Besten nicht alles selbst machen, sondern zumindest Bibliotheken nutzen. Für große Anwendungen empfiehlt sich der Einsatz eines Frameworks wie z. B. die NetBeans Platform. Bei solchen Lösungen hat man dann allerdings einen gewissen Einarbeitungsaufwand.

Wenn JavaFX passt, kannst Du natürlich auch das statt Swing nutzen.
 
Z

zlFavourite

Aktives Mitglied
Login wäre ein klassischer Fall für einen modalen JDialog.
Danke für den Hinweis, dann probier ich das mal dafür zu ändern.

Ich möchte für meine Anwendung letztendlich halt nur ein Fenster haben. Dies ist halt für den User einfacher.
Ich möchte da nun eigentlich auch keinen allzu großen Aufwand in die GUI legen.

Ich bin somit aber leider noch nicht weiter gekommen wie ich das nun mit JFrame umsetze.
 
Z

zlFavourite

Aktives Mitglied
Ich kann dir später mal ein paar Screenshots schicken. Bekomm grad aber nen java.lang.StackOverflowError und somit läuft das Programm nicht :D
 
J

Joreyk

Bekanntes Mitglied
OK, und wie soll das aussehen? Menüeiste und sobald ein Menüpunkt ausgewählt wurde, ändert sich der Fensterinhalt?
ds umzusetzen ist in javafx halt super schick zu lösen und da er in einem anderen thread fx in betracht zieht könnte man es dann mit meinem beispiel oben lösen das beispiel ist aber veraltet nur so fürs protokoll da ist Controller und Model durcheinander gemixt
 
Z

zlFavourite

Aktives Mitglied
Ja genau, ich werde in Zukunft mit FX arbeiten. Mein aktuelles Projekt werde ich so noch fertig machen, aber für die Zukunft werde ich dann umsteigen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX JavaFX Forms mit Groovy starten AWT, Swing, JavaFX & SWT 1
L SWT Eingabefelder beim Schließen des Forms auslesen AWT, Swing, JavaFX & SWT 3
J SWT JFace Tree in Section unsichtbar (Eclipse Forms) AWT, Swing, JavaFX & SWT 5
dzim SWT Layout mit Sections aus Eclipse Forms AWT, Swing, JavaFX & SWT 17
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
D Mehrere JTabel in einem Frame positionieren AWT, Swing, JavaFX & SWT 5
N mehrere JComboBoxes AWT, Swing, JavaFX & SWT 10
M gleicher TableCellRenderer für mehrere unterschiedliche Tabellen AWT, Swing, JavaFX & SWT 5
T Mehrere sich bewegende Objekte in einem Frame AWT, Swing, JavaFX & SWT 14
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
N Mehrere Frames AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben