GUI-Einstellungen mittels Preferences

JMarkus

Mitglied
Ich habe folgendes Problem. Es gibt eine Startklasse von welcher aus ein Fenster erstellt wird. Für dieses Fenster gibt es Einstellungen (z. B. Größe, Position) die mittel Preferences gespeichert sind. Wie bringe ich nun alles zusammen, sodass ich die gespeicherten Einstellungen auf das zu erstellende Fenster anwenden kann? Oder ist der generelle Aufbau schon falsch?

Startklasse:
Java:
public class Main {
    public static void main(String[] args) {    
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainFrame().setVisible(true);
            }
        });
    }
}
Einstellungen:
Java:
public class Settings {
    public void getPrefs() {
        Preferences prefs = Preferences.userNodeForPackage(this.getClass());
        int width = prefs.getInt("WIDTH", 200);
        ....
    }
}
Fenster:
Java:
public class MainFrame extends javax.swing.JFrame {
    public MainFrame() {
        initComponents();
    }               
    private void initComponents() { ...
 
Du könntest entweder das Prefs Object static deklarieren oder du übergibst dieses einfach als Paramater an dein mainframe

also entweder :

Java:
class MainFrame{
   .....
  void init(){
       width = Settings.PREFS.getInt("width", 200);

  }
}

oder du arbeitest halt mit einer als Parameter übergebenen Instanz.
 
Zuletzt bearbeitet:
Das sind meiner Ansicht nach auch die einzigen beiden (sinnvollen) Möglichkeiten. Habe mich für die erste Variante (Settings als statische Hilfsklasse) entschieden. Damit ist man flexibler, falls auch noch andere Nicht-GUI-Einstellungen gespeichert werden sollen und der Zugriff auch von anderen Stellen aus erfolgen muss.
 
Andere Möglichkeit , du initialisierst alle deine GUI Komponenten mit jeweils einer eingenen Properties Datei. sprich du gibst jeder Komponente als Attribut ein Properties Objekt welches dann aus einer Datei initialisiert wird.

Zusätzlich hierzu könntest du ein Preferences Objekt verwenden um Anwendungsübergreifende eigenschaften und Einstellungen zu hinterlegen.

Einziger Nachteil ist eben das Properties ausschließlich mit Strings arbeitet, und keine vorgefertigten Methoden anbietet um z.B eine Typumwandlung in einen Integer druchzuführen , allerdings kannst du so schön die Strukturen trennen, da jedes GUI element sein eigenes Properties Objekt verwendet und dort alle Eigenschaften zu sich selbst hinterlegt werden .
 
Das ginge doch auch mit einem Prefs-Objekt... einfach für jedes GUI-Element einen neuen Knoten anlegen.

selbstverständlich, ist halt Geschmackssache ob du alles in die Registry eintragen möchtest oder es in gesonderten Dateien verwalten können willst.
 
Naja, bei den Properties-Dateien hätte man halt wieder das Problem, wo diese plattformunabhängig gespeichert werden können. Um dieses Detail muss man sich bei Preferences eben nicht kümmern. Unter Linux/Mac speichert er die in xml-Dateien, unter Windows in der Registry.

Nebenbei bemerkt habe ich festgestellt, dass die statische Klasse "Settings" gar nicht nötig ist. Da die Preferences ja nur statische Methoden anbietet, brauch ich diese ja nicht nochmal in eine statische Klasse "Setting" packen. Demzufolge mach ich das jetzt direkt in den Klassen der GUI-Elemente. Das kommt dann der von dir im Kommentar #4 vorgeschlagenen Variante nahe.
Java:
public class MainFrame extends javax.swing.JFrame {
   
    private Preferences prefs;

    public MainFrame() {
       prefs = Preferences.userNodeForPackage(getClass());
       initComponents();
    }
    private void initComponents() {
       setSize(prefs.getInt("width", 100), prefs.getInt("height", 100));
       ...
 
Zuletzt bearbeitet:

Zurück
Oben