GUIs miteinander verknüpfen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Ich hab folgendes Problem: Ich hab ein paar GUIs auf ein paar Klassen aufgeteilt, die jeweils alle JPanel erweitern; z.B. Login, Menu, bla bla bla

In meiner Hauptklasse sollen nun diese Panels ausgetauscht werden, z.B. nach Klick auf Login-Button soll die Login-Gui angezeigt werden.

Bis jetzt hab ich immer das alte Panel gelöscht und eine neue Instanz vom Login-Panel eingefügt. Das Problem dabei ist, dass ich nicht gespeicherte Daten verliere, wenn ich das alte Panel lösche.
Ich hab auch probiert, das alte Panel mit setVisible(false) unsichtbar zu machen, was zwar klappt, aber das neue Panel wird dann nicht angezeigt.

Hier der Code (ist eine Methode von meiner Hauptklasse):

Code:
public void setCenter(int panel)
{
    pCenter.setVisible(false);                    //Altes Center-Panel unsichtbar

    if (panel == 0)
        pCenter = login;
    else if (panel == 1)
        pCenter = menu;
    //...
    
		
    pCenter.setVisible(true);
    this.getContentPane().repaint();            //GUI aktualisieren
    this.getContentPane().validate();
}



Vielleicht kann mir jemand helfen, oder vielleicht kennt jemand eine bessere Lösung.

thx,
Espiritu
 
B

Beni

Gast
Jeder Container hat die Methode "remove" und "removeAll", mit dem man die Components wieder entfernen kann.
Die kannst du benutzen.
 

Troilus

Mitglied
Vielleicht kann mir jemand helfen, oder vielleicht kennt jemand eine bessere Lösung.

Ich blende btw. meine Fenster so aus

Code:
// Dialog 1 und 2 werden erzeugt bzw. neu zugeordnet "InstanceRegistryView" gibt halt n JDialog Objekt zurück
JDialogCreateRecipe1of4 createRecipe1 = InstanceRegistryView.getInstance().getCreateRecipe1of4Instance();
JDialogCreateRecipe2of4 createRecipe2 = InstanceRegistryView.getInstance().getCreateRecipe2of4Instance();
				
createRecipe1.hide();
createRecipe2.show();

Dazu musst Du aber dann dein ausgeblendetes Fenster sichern, um wieder drauf zugreifen zu können(später mit .show evtl.). Falls Du pro Fenster nur eine Instanz benötigst kannst Du Dir ja mal das Singleton Pattern ansehn. Ich arbeite in Verbindung mit meiner GUI damit und komm so gut klar.
 
G

Guest

Gast
Danke!! Das Singleton-Pattern ist ideal für meine Zwecke.

In deinem Beispiel verwaltet also die InstanceRegistryView (Singleton) sämtliche Instanzen der JDialogs RecipeX (die auch wieder Singletons sind), oder?

Übrigens, beim obigen Code bin ich auch schon auf den Fehler draufgekommen:
Code:
public void setCenter(int panel) 
{ 
    pCenter.setVisible(false);            //eigentlich unnötig

    if (panel == 0) 
        pCenter = login;                     //müsste jetzt die einzige Instanz zuweisen (Singleton), also login.getInstance()
    else if (panel == 1) 
        pCenter = menu;                   //Singleton: menu.getInstance()
    //...
    
    
//Ist jetzt hinfällig. Der JFrame muss nicht aktualisiert werden, weil sich beim JFrame nichts geändert hat.
/*   
    pCenter.setVisible(true); 
    this.getContentPane().repaint();    //GUI aktualisieren 
    this.getContentPane().validate(); 
*/

    pCenter.updateUI();                    //Center-Panel aktualisieren

}


MfG,
Espiritu
 
G

Guest

Gast
Ergänzung bzw. Korrektur:

Code:
    if (panel == 0) 
        pCenter = login;        //müsste jetzt die einzige Instanz zuweisen (Singleton), also login.getInstance()
    else if (panel == 1) 
        pCenter = menu;        //Singleton: menu.getInstance()
    //...

Diesen Teil müsste eine zentrale "GUI-Verwaltung" (wieder ein Singleton) übernehmen.


Mfg,
Espiritu
 

Troilus

Mitglied
Hier mal meine Singleton Klasse für meine View

Code:
import view.*;

public class InstanceRegistryView {

//	interne Referenzen
   private static InstanceRegistryView instanceRegistry = null;

   private MainFrame mainFrame = null;
   private int mainFrameCount = 0;
   
   private JMenuBarCookBookMenu menuBar = null;
   private int menuBarCount = 0;
   
   private JDialogCreateRecipe1of4 createRecipe1 = null;
   private int createRecipe1Count = 0;
   
   private JDialogCreateRecipe2of4 createRecipe2 = null;
   private int createRecipe2Count = 0;
   
   private JDialogCreateRecipe3of4 createRecipe3 = null;
   private int createRecipe3Count = 0;
   
   private JDialogCreateRecipe4of4 createRecipe4 = null;
   private int createRecipe4Count = 0;

   


   /* --- KONSTRUKTOR_1 --- */
	 private InstanceRegistryView(){
	 }

	 public static InstanceRegistryView getInstance(){
	   if(instanceRegistry == null)
		 instanceRegistry = new InstanceRegistryView();
	   return instanceRegistry;
	 }


	 public synchronized MainFrame getMainFrameInstance(){
	   if(mainFrame == null && mainFrameCount == 0){
		 mainFrameCount = 1;
		 mainFrame = new MainFrame();
	   }
	   return mainFrame;
	 }
	 
	public synchronized JMenuBarCookBookMenu getMenuBarInstance(){
	   if(menuBar == null && menuBarCount == 0){
		 menuBarCount = 1;
		 menuBar = new JMenuBarCookBookMenu();
	   }
	   return menuBar;
	}
	
	public synchronized JDialogCreateRecipe1of4 getCreateRecipe1of4Instance(){
		if(createRecipe1 == null && createRecipe1Count == 0){
		 createRecipe1Count = 1;
		 createRecipe1 = new JDialogCreateRecipe1of4();
		}
		return createRecipe1;
	}
	
	public synchronized JDialogCreateRecipe2of4 getCreateRecipe2of4Instance(){
		if(createRecipe2 == null && createRecipe2Count == 0){
		 createRecipe2Count = 1;
		 createRecipe2 = new JDialogCreateRecipe2of4();
		}
		return createRecipe2;
	}
	
	public synchronized JDialogCreateRecipe3of4 getCreateRecipe3of4Instance(){
			if(createRecipe3 == null && createRecipe3Count == 0){
			 createRecipe3Count = 1;
			 createRecipe3 = new JDialogCreateRecipe3of4();
			}
			return createRecipe3;
		}
	
	public synchronized JDialogCreateRecipe4of4 getCreateRecipe4of4Instance(){
		if(createRecipe4 == null && createRecipe4Count == 0){
		 createRecipe4Count = 1;
		 createRecipe4 = new JDialogCreateRecipe4of4();
		}
		return createRecipe4;
	}

}
Da kannst Du Dir ja rausziehen wie ich meine View-Klassen verwalte bzw. was passiert wenn ich versuche über InstanceRegistryView darauf zuzugreifen

Bis dann :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Objekte von 2 GUIs zusammenfassen AWT, Swing, JavaFX & SWT 2
M Zeichenketten in GUIs (toString() vermeiden?) AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
V Guis erstellen mit FXML und javaFX gemischt AWT, Swing, JavaFX & SWT 5
U Swing Fragen bezüglich Multithreaded GUIs (Grundlagen): AWT, Swing, JavaFX & SWT 3
J LookAndFeel Java-GUIS AWT, Swing, JavaFX & SWT 19
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
newcron Suche die hässlichsten Swing GUIs AWT, Swing, JavaFX & SWT 4
P seltsame Performance Probleme bei 2 Guis abhängig vom Aufruf AWT, Swing, JavaFX & SWT 8
2 Schönere GUIs? AWT, Swing, JavaFX & SWT 9
P richtige "Architektur" mit GUIs AWT, Swing, JavaFX & SWT 2
M Swing bremst GUIs von allen Programmen aus AWT, Swing, JavaFX & SWT 8
O Strukturieren von GUIs AWT, Swing, JavaFX & SWT 22
K UNICODE ZEICHEN in den SWing-GUIs AWT, Swing, JavaFX & SWT 4
K welches package muss ich angeben um GUIs zu erstellen? AWT, Swing, JavaFX & SWT 5
A Automatisierter Test von Swing GUIs AWT, Swing, JavaFX & SWT 3
M Wie machen die diese GUIs? AWT, Swing, JavaFX & SWT 2
RedEagle JavaFX Verschiedene Bereiche miteinander verknüpfen AWT, Swing, JavaFX & SWT 7
A Swing zwei JComboBoxen miteinander vergleichen und anschließend Button umwandeln AWT, Swing, JavaFX & SWT 7
G Texte miteinander vergleichen AWT, Swing, JavaFX & SWT 5
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
L Mehrere Scrollbar objekte miteinander verbinden AWT, Swing, JavaFX & SWT 3
V JScrollPane und JEditPane wollen nicht wirklich miteinander AWT, Swing, JavaFX & SWT 2
M 2 gleichberechtigte Fenster sollen miteinander arbeiten AWT, Swing, JavaFX & SWT 7
L BorderLayout in BorderLayout verknüpfen AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
R Swing JTable mit Datenstruktur verknüpfen AWT, Swing, JavaFX & SWT 13
P Swing [Gelöst]Radiobuttons "Verknüpfen" AWT, Swing, JavaFX & SWT 3
3 Swing JButton mit Sql verknüpfen AWT, Swing, JavaFX & SWT 3
M JTable Sortierung - -zeilenweise mit Objekten verknüpfen AWT, Swing, JavaFX & SWT 4
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
D Object mit JTable verknüpfen AWT, Swing, JavaFX & SWT 7
C Button/Textfeld mit Variable verknüpfen AWT, Swing, JavaFX & SWT 4
T JTable - mehrere Tabellen verknüpfen AWT, Swing, JavaFX & SWT 14
G JComboBox - Anzeige mit Wert verknüpfen AWT, Swing, JavaFX & SWT 3
N JLabel o.ä. mit Variablen verknüpfen AWT, Swing, JavaFX & SWT 10
B Zwei Choice-Menüs verknüpfen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben