# Zustand eines GUI speichern



## beens0n (18. Apr 2012)

Hallo,

ich baue zur Zeit einen Stundenplan, dort verschiebe ich JPanels per Drag and Drop und beschrifte sie (JTextField). Ist es möglich den Zustand, des GUI's zu speichern, also die Positionen, an denen sich die JPanels befinden?
Habe zwar schon von db4o gelesen, aber erhoffe mir, dass es eine einfachere Methode gibt, z.B. den JFrame mit seinen Objekten und deren Positionen in eine Textdatei o.ä. zu schreiben.


----------



## Swoop (18. Apr 2012)

Hey,

du kannst dir doch die x und y werte geben lassen? Diese Kannst du dann mit einem eindeutigen Namen etc in eine Textdatei schreiben?

Grüße Swoop


----------



## maestr0 (18. Apr 2012)

> du kannst dir doch die x und y werte geben lassen? Diese Kannst du dann mit einem eindeutigen Namen etc in eine Textdatei schreiben?



so hab ich es beim Entwickeln eines Plugins gemacht.
Ich habe Werte in einer XML Datei gespeichert,welche beim Start wieder ausgelesen werden.
Ob das auch bei dir funktioniert weiß ich leider nicht.
Mein Zauberwort hieß damals "DialogSettings". Hier findest du ein Beispiel.
Wizard Demo : WizardSWT JFace EclipseJava


----------



## beens0n (18. Apr 2012)

Danke, werde ich mir mal anschauen.
Ist es evtl auch möglich, dass ich einfach die Komponenten, die ich schon angeordnet habe (auf einem JPanel) mit getComponents erfrage und die dann in eine Datei speichere, aus der ich die Infos abrufe?


----------



## maestr0 (18. Apr 2012)

Tut mir leid,aber die Frage kann ich weder mit Ja noch mit Nein beantworten,weil ich ehrlich gesagt nicht weiß ob das funktioniert.
Kannst es aber einfach mal versuchen,wie gesagt ich habe nur Items aus einer Combo gespeichert und diese beim Start wieder geaddet.
Möglich wäre es,dass dein Versuch auch geht,da habe ich aber leider zu wenig Erfahrung.Hoffe es meldet sich noch jemand,der darüber mehr weiß.


----------



## Paddelpirat (18. Apr 2012)

Da ist das Stichwort Serialisierung bzw. Serializable. Das funktioniert zwar sowei ich weiß in der Theorie, ist aber erstens nicht sehr schön und es gibt laut JavaDoc keine Garantie, dass deine gespeicherten Komponenten noch in der nächsten Java-Version richtig ausgelesen werden.


----------



## bERt0r (18. Apr 2012)

Für einen Stundenplan würd ich mir erstmal eine Klasse "Eintrag" erstellen, in Beginn und End-Datum sowie die jeweilige Nachricht steht.
Zur Anzeige würde ich mir dann eine Panel-Klasse machen, die ich mit so einem Eintrag-Objekt instanziere.
Änderst du nun dein Panel und möchtest es speichern, sollte dein Panel die änderung an das Eintrag-Objekt weitergeben. Speichern brauchst du dann nur das Eintra-Objekt.

Um es anders auszudrücken, benutze das MVC Pattern und serialisiere das Model.


----------



## GUI-Programmer (18. Apr 2012)

... Genau. Denn dann kannst du einfach beim Start deines Programmes alle nötigen Werte vom Model laden, und so die GUI dementsprechend aufbauen. Neben dem "standartmäßigen Serialisierverfahren" kann ich dir nur XStream empfehlen, ist imo recht leicht zu programmieren.


----------



## Gulipono (29. Dez 2013)

Ich habe ein ähnliches Problem und dieses auch schon in nem eigenem Thema angesprochen,
hier passt es aber besser hin.

In meiner Anwendung werden Button mit Funktion auf einer GUI plaziert.
Diese neuen Button sollen bei einem Neustart des Programms wieder da sein, also geladen werden.

Hatte versucht das ganze komplett als Objekt zu serialisiern, war damit aber scheinbar auf dem Holzweg.
 Ein klick auf einen Hinzufügen Button löst folgenden Dialog aus, der dann den neuen Button erzeugt.


```
public void buttondialog()
  {
    final JTextField buttontext = new JTextField("",20);
    final JButton okTextButton = new JButton("ok");
    final JDialog buttonDialog = new JDialog();    
    JPanel dialogPane = new JPanel();
    
    okTextButton.addActionListener(new ActionListener()
    {
      public void  actionPerformed(ActionEvent e)
      {
        
        buttonToAdd  =   buttontext.getText();
        final JButton dummybutton  =   new JButton(buttonToAdd);
        dummybutton.addActionListener(new ActionListener()
        {
          public void  actionPerformed(ActionEvent e)
          {
            satzWerk.setText(dummybutton.getText());
            satzWerkZwischenablage();
          }           
        }                         );
        panel1.add(dummybutton) ;
        hintergrundPane.repaint();
        tabpane.repaint();
        buttonDialog.setVisible(false);        
      }      
    }
    );    
    buttonDialog.setTitle("Button hinzufügen");
    buttonDialog.setSize(200,200);
    buttonDialog.setModal(true);
    buttonDialog.add(dialogPane);     
    dialogPane.add(buttontext);
    dialogPane.add(okTextButton);    
    buttonDialog.setVisible(true);    
  }
```

Ist das Produkt überhaupt speicherbar ?
Oder muss ich Grundsätzlich anders vorgehen, damit eine Speicherung später möglich ist ?
Ich weiß echt nicht mehr weiter.


----------

