Java Gui Strukturieren

mister-man

Mitglied
Hallo miteinander,

ich ein grundlegendes Problem mit meiner Gui in einem Projekt.
Derzeit besitzt mein Projekt eine "Superklasse" Namens Gui, in dem die Fenster alle beim Start gebaut werden, dann unsichtbar gemacht werden.

Bisher ging auch alles soweit gut, nur wenn Textboxen etc ins spiel kommen, bleiben alle alten Informationen enthalten (Das fenster wurde ja beim schließen nur unsichtbar gemacht).

Nun bin ich angefangen alle Fenster in einzelnen Non Static klassen neu zu bauen. Für jedes fenster jeweils eine Instans zu öffnen. Doch lässt sich nun das Fenster nicht mehr auf dem panal hinzufügen.

Nun meine eigendliche Frage:
Wie strukturiere ich es richtig und gibt es vielleicht ein Beispiel bereits dafür.
Habe die Sufu genutzt, werde aber nicht richtig schlau daraus, lese nur oft, das es Geschmackssache ist....



Danke im voraus !
 
Zuletzt bearbeitet:
V

vanny

Gast
Woos???:L

Du hast also ein Programm, dass eine GUI besitzt.
Dann hätte ich da mal die Frage, ob und warum du mehrere Fenster benötigst.?
Ich denke mal, du suchst nach etwas wie dem CardLayout.

Womit arbeitest du, Swing? AWT? ... zeig mal Code.

Tutorials und Anleitungen gibt es hier und im Netz noch und nöcher.
Wenn du dein Problem mal etwas genauer schilderst (und bitte lies dir nochmal durch, was du da geschrieben hast:autsch:), dann kann man dir auch helfen.

Gruß Vanny
 

mister-man

Mitglied
Okay, stimmt. Die Beschreibung war nicht so toll. Sahß zu diesem Zeitpunkt aber schon einige Stunden voller Verzweiflng am PC XD (so sah da mein Kopf aus XD )

Für die Gui nutze ich derzeit Swing und den Netbeans Gui Designer, der standartmäßig an Bort ist.
Im ersten Gui entwurf habe ich Quasi eine Superklasse mit der vollständigen Gui in einer Klasse gebaut. Das ergebniss sind 10000 Zeilen +-. Dabei haben die Buttons etc ncoh keien Funktion.
Dann habe ich der Übersicht halber Steuerklassen für Nutzeraktionen, Statistik,.... gebaut. In dieser werden die Guielemente (Knöpfe, Listen, Textfelder) übergeben und dort ist der Funktionale Code enthalten.

Das sah dann etwa so im Gui Code:

Java:
user.login(anBenutzernameTFeld, anPasswordPFeld, Uebersicht, Anmelden, mDatei,
                mTerminverwaltung, mBeleg, mStatistik, mKunde, mRaum, mKontingente, 
                mBenutzer, mRollen, mEinstellungen, MenuBar);

Die user.login sah dann so aus:

Java:
public static void login(JTextField anBenutzernameTFeld, JPasswordField anPasswordPFeld,
            JInternalFrame Uebersicht, JPanel Anmelden, JMenu mDatei, JMenu mTerminverwaltung,
            JMenu mRechnung, JMenu mStatistik, JMenu mKunde, JMenu mRaum, JMenu mKontingente,
            JMenu mBenutzer, JMenu mRollen, JMenu mEinstellungen, JMenuBar MenuBar)
   {
       String name = anBenutzernameTFeld.getText();
       String pw = String.valueOf(anPasswordPFeld.getPassword());
       
       // Suche Benutzer ID
       List bid_list = suche.benutzer(name, "", "");
       String bid = (String) bid_list.get(0);
       if (!"NULL".equals(bid))
       {
           if (name.length() > 0 && pw.length() > 0)
           {
                // Erzeuge Benutzer
                benutzer benutzer = new benutzer();
                // Lade Benutzerx
                benutzer.laden(bid);
                // Prüfe Login
                if (hash.md5(pw).equals(benutzer.getPw()))
                {
                    // Setze session Informationen
                    main.lTimestamp = timestamp.getTimestamp();
                    main.aTimestamp = main.lTimestamp;
                    main.lOk = true;
                    main.bNname = benutzer.getNname();
                    main.bVname = benutzer.getVname();
                    main.login = benutzer.getLogin();
                    main.lTimestamp = timestamp.getTimestamp();

                    // Login OK
                    Uebersicht.setVisible(true);//öffnent das übersichtsfenster
                    Anmelden.setVisible(false);//schließt das Anmeldefenster
                    mDatei.setEnabled(true);
                    mTerminverwaltung.setEnabled(true);
                    mRechnung.setEnabled(true);
                    mStatistik.setEnabled(true);
                    mKunde.setEnabled(true);
                    mRaum.setEnabled(true);
                    mKontingente.setEnabled(true);
                    mBenutzer.setEnabled(true);
                    mRollen.setEnabled(true);
                    mEinstellungen.setEnabled(true);
                    MenuBar.setVisible(true);

                }
                else
                {
                    // Login falsch (Passwort)
                    final ImageIcon icon = new ImageIcon(user.class.getResource("/de/roomIT/inter/iconerror.png"));
                    JOptionPane.showMessageDialog(null, "Benutzername oder Passwort falsch", "Falsche Anmeldeinformationen", JOptionPane.ERROR_MESSAGE, icon);
                }
           }
           else
           {
               // Login falsch (Benutzername
               final ImageIcon icon = new ImageIcon(user.class.getResource("/de/roomIT/inter/iconerror.png"));
               JOptionPane.showMessageDialog(null, "Benutzername oder Passwort falsch", "Falsche Anmeldeinformationen", JOptionPane.ERROR_MESSAGE, icon);
           }
       }
       else
       {
           // Login falsch (Benutzername
           final ImageIcon icon = new ImageIcon(user.class.getResource("/de/roomIT/inter/iconerror.png"));
           JOptionPane.showMessageDialog(null, "Benutzername oder Passwort falsch", "Falsche Anmeldeinformationen", JOptionPane.ERROR_MESSAGE, icon);
       }
       anPasswordPFeld.setText("");//entfernt dei zeichen aus dem Passwordfeld
   }

Wie man im code sieht, werden beim öffnen der Fenster nur die bereits erstellten fenster sichtbar gemacht. Beim schließen undsichtbar. Deshalb müssen die eingegeben Inhalte dann auch aus den Feldern gelöscht werden.

Im 2ten Interfaceentwurf habe ich nun jedes der Fenster in meinem Menu in einer eigenen Klasse gebaut. Dann habe ich einem Klasse entworfen um die Instanzen der verschiedenen Fenster zu verwalten.

Diese sieht wie folgt aus (auszug):

Java:
public class sessionHandler {
    
    private static roomITinterface room = null;
    private static Login login = null;
    private static Overview overview = null;
    // ......
    
    //Instanz für das Hauptfenster
    public static void newMain()
    {
        if(sessionHandler.room == null)
        {
            sessionHandler.room = new roomITinterface();
        }
    }
    //Instanz wird zerstört
    public static void delMain()
    {
        sessionHandler.room = null;
    }
    //Instanz wird geholt
    public static roomITinterface getMain()
    {
        return sessionHandler.room;
    }
    //Instaz für das Anmeldefernster wird erstelt
    public static void newLogin()
    {
        if(sessionHandler.login == null)
        {
            sessionHandler.login = new Login();
        }
    }
    //Instanz zerstören
    public static void delLogin()
    {
        sessionHandler.login = null;
    }
    //Instanz holen
    public static Login getLogin()
    {
        return sessionHandler.login;
    }

    // ....
}

Aus der Steuerklasse dann wird die Gui wie folgt angesprochen:

Java:
public static void login()
   {
       String name = sessionHandler.getLogin().getLoginnameTF().getText();
       String pw = String.valueOf(sessionHandler.getLogin().getPasswordPF().getPassword());
       
       
       // Suche Benutzer ID
       List bid_list = suche.benutzer(name, "", "");
       String bid = (String) bid_list.get(0);
       if (!"NULL".equals(bid))
       {
           if (name.length() > 0 && pw.length() > 0)
           {
                // Erzeuge Benutzer
                benutzer benutzer = new benutzer();
                // Lade Benutzerx
                benutzer.laden(bid);
                // Prüfe Login
                if (hash.md5(pw).equals(benutzer.getPw()))
                {
                    // Setze session Informationen
                    main.lTimestamp = timestamp.getTimestamp();
                    main.aTimestamp = main.lTimestamp;
                    main.lOk = true;
                    main.bNname = benutzer.getNname();
                    main.bVname = benutzer.getVname();
                    main.login = benutzer.getLogin();
                    main.lTimestamp = timestamp.getTimestamp();

                    // Login OK
                    gui.Mainscreen();
                    gui.clogin();

                }
                else
                {
                    // Login falsch (Passwort)
                    final ImageIcon icon = new ImageIcon(user.class.getResource("/de/roomIT/inter/iconerror.png"));
                    JOptionPane.showMessageDialog(null, "Benutzername oder Passwort falsch", "Falsche Anmeldeinformationen", JOptionPane.ERROR_MESSAGE, icon);
                }
           }
           else
           {
               // Login falsch (Benutzername
               final ImageIcon icon = new ImageIcon(user.class.getResource("/de/roomIT/inter/iconerror.png"));
               JOptionPane.showMessageDialog(null, "Benutzername oder Passwort falsch", "Falsche Anmeldeinformationen", JOptionPane.ERROR_MESSAGE, icon);
           }
       }
       else
       {
           // Login falsch (Benutzername
           final ImageIcon icon = new ImageIcon(user.class.getResource("/de/roomIT/inter/iconerror.png"));
           JOptionPane.showMessageDialog(null, "Benutzername oder Passwort falsch", "Falsche Anmeldeinformationen", JOptionPane.ERROR_MESSAGE, icon);
       }
       sessionHandler.getLogin().setPasswordPF("");//entfernt dei zeichen aus dem Passwordfeld
   }


Die Grundfrage ist nun, bin ich eher mit dem ersten oder dem 2ten versuch auf dem richtigen weg? Oder gehe ich mit beiden versuchen den falschen weg. Persönlich gefällt mir der 2te beschriebene Weg besser, doch sollte es ja auch richtig sein....

Bin derzeit ratlos?! :bahnhof:
 

Cola_Colin

Top Contributor
Allgemein gesagt: Erzeuge ein neues Fensterobjekt, wenn du es brauchst und zerstöre es, wenn du es nicht mehr benötigst. Die Methoden dazu gehören dann alle jeweils in die Klasse des jeweiligen Fensters.

Die Datenhaltung gehört sowieso in eine seperate Klasse.

Also eher dein zweiter Weg als der erste. Irgendwelche Frame zu recyclen ist unnötig und macht nur Probleme ;)
 

mister-man

Mitglied
Okay, dann sag ich schonmal danke. Die Antwort war klar und deutlich.
Beim googleln fand ich leider oft die Antwort: Wie es dir gefällt......


Danke !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Java Applikation in MVC gut strukturieren AWT, Swing, JavaFX & SWT 14
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
Juelin Java <-> Delphi AWT, Swing, JavaFX & SWT 3
H Exceptions seit java: 1.6.0_65 Umstellung AWT, Swing, JavaFX & SWT 3
H Exception: java.lang.ClassCastException AWT, Swing, JavaFX & SWT 2
M JavaFX java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found AWT, Swing, JavaFX & SWT 5
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
W Kennt jemand Dear ImGui (und den Java-Wrapper dazu)? AWT, Swing, JavaFX & SWT 0
B Java Projekt mit JavaFX und jfoenix ausführbar machen AWT, Swing, JavaFX & SWT 46
D JAVA Schieberegler AWT, Swing, JavaFX & SWT 6
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
P Fehlermeldung: Error: Could not find or load main class set Caused by: java.lang.ClassNotFoundException: set AWT, Swing, JavaFX & SWT 5
Encera Java FX im Eclipse-Marketplace nichtmehr auffindbar AWT, Swing, JavaFX & SWT 6
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
M Java Dateien kopieren mit Fortschrittsbalken AWT, Swing, JavaFX & SWT 13
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
E 3D-Grafik Java Fatal error bei LWJGL AWT, Swing, JavaFX & SWT 2
Heldderschatten Java Events und Interfaces AWT, Swing, JavaFX & SWT 18
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
E Java-TexturePaint sehr langsam AWT, Swing, JavaFX & SWT 9
N Java MySQL Datenbank durchsuchen? AWT, Swing, JavaFX & SWT 7
maximstein JavaFX WebView - java.lang.NoSuchMethodError: 'boolean com.sun.prism.ResourceFactory.isDisposed()' AWT, Swing, JavaFX & SWT 4
Splayfer Custom Font in AttributedString Java AWT, Swing, JavaFX & SWT 4
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
izoards *.doc Seitenränder per Java setzen... AWT, Swing, JavaFX & SWT 14
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
J Key-Listener in Java AWT, Swing, JavaFX & SWT 37
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
N Java Mouse Listiner macht alles zusammen AWT, Swing, JavaFX & SWT 4
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
J Spiel mit Java AWT, Swing, JavaFX & SWT 9
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
izoards Java FX Window Event SHOWING AWT, Swing, JavaFX & SWT 17
N FXMLLoader.load java.lang.RuntimeException: Gradle AWT, Swing, JavaFX & SWT 2
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
dtr84 JavaFX/OpenJFX mittels Apache Ivy einbinden (Java 11) AWT, Swing, JavaFX & SWT 18
M Jogl und Java 3d AWT, Swing, JavaFX & SWT 0
S0PEX JavaFX Java 8 auf 15 migrieren OpenJFX mit Gradle eingebunden, jedoch nicht gefunden !? AWT, Swing, JavaFX & SWT 4
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
V Java-Zeichenfeld mit AWT AWT, Swing, JavaFX & SWT 3
N java Gui friert scheinbar zufällig ein AWT, Swing, JavaFX & SWT 5
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
P Java Fx einrichten AWT, Swing, JavaFX & SWT 2
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
MiMa Java und JavaFX 13 läuft endlich AWT, Swing, JavaFX & SWT 4
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Trèfle Ausklappbare Diagramme in Java AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
K JAVA FX Constraints AWT, Swing, JavaFX & SWT 2
F Java FX und webcam AWT, Swing, JavaFX & SWT 1
T Wie kann man in java aufwendige grafiken programmieren AWT, Swing, JavaFX & SWT 1
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
J Java SWT Tabelleninhalt formattieren AWT, Swing, JavaFX & SWT 10
Blender3D Falsche Werte mit Java Toolkit Screensize AWT, Swing, JavaFX & SWT 4
K Swing AWT-EventQueue-1 java.lang.NoClassDefFoundError bei setVisible(true) AWT, Swing, JavaFX & SWT 3
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
I Java Bildfarbe ändern wie bei Photoshop AWT, Swing, JavaFX & SWT 9
R JavaFX Java FXML Vererbung in Klassen AWT, Swing, JavaFX & SWT 9
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
J Parallele Aktionen in Java FX richtig durchführen. AWT, Swing, JavaFX & SWT 5
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
M JavaFX java.lang.IllegalStateException: Location is not set. AWT, Swing, JavaFX & SWT 9
L Java- CardLayout AWT, Swing, JavaFX & SWT 10
M Java zeichnet nicht pixelgenau AWT, Swing, JavaFX & SWT 40
B Swing Eclipse is running under 0, but this Java project has a 1.6 Java compliance level, so WindowBuilder AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
S Java Gui AWT, Swing, JavaFX & SWT 5
R Sierpinski Dreieck mit Java FX AWT, Swing, JavaFX & SWT 4
Flynn java.lang.UnsupportedOperationException: Not supported yet AWT, Swing, JavaFX & SWT 7
D Zwei getrennte Java Klassen verbinden. Wie ? AWT, Swing, JavaFX & SWT 2
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
MiMa Java, Maven Projekte nach JavaFX? AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L java.lang.NullPointerException - Fehlermeldung AWT, Swing, JavaFX & SWT 2
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
J AWT System Farben / java.awt.SystemColor funktioniert nicht AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben