Programm mit einem Fenster für Einstellungen

Status
Nicht offen für weitere Antworten.
C

Curryhuhn

Gast
Ich würde gerne ein kleines Programm von mir um ein Fenster erweitern dass man über das "Menü -> Extras -> Eigenschaften" erreicht und in dem man kleinere Einstellungen vornehmen kann, die a) sofort umgesetzt und b) für die nächsten Programmstarts gespeichert werden.

Dabei ist das Erstellen des Fensters mit den JLabels, JTextFields usw. nicht das Problem. Viel mehr interessiert mich, wie ich die Eigenschaften speicher.

Ich würde mich sehr freuen, wenn ihr einfach mal schreibt, wie ihr sowas angeht. Oder gibt es da DIE Musterlösung?

- Curryhuhn
 

Niki

Top Contributor
Es gibt die Klasse Properties mit der du sehr einfach eine Properties-Datei einlesen und auch wieder speichern kannst (load uns store). Ich bau mir normalerweise für meine Applikation eine "Settings" Klasse, die beim Starten der Appl ein File mitbekommt, die Properties lädt und verwaltet. Die Klasse selbst beinhaltet nur statische Methoden, dadurch ist es einfach von überall auf sie zuzugreifen.
Bei mir schaut sie so aus:

Code:
public class Settings {
  private static final Properties props = new Properties();

  public static final String PROPERTY_PROP1 = "prop1";

  public static final String PROPERTY_PROP2 = "prop2";

  private static File file = null;

  public static String getProperty(String key) {
    return props.getProperty(key);
  }

  public static void putProperty(String key, String value) {
    props.put(key, value);
  }

  public static void load(File file) throws Exception {
    Settings.file = file;
    FileInputStream fis = new FileInputStream(file);
    props.load(fis);
    fis.close();
  }

  public static void store() throws Exception {
    FileOutputStream fos = new FileOutputStream(Settings.file);
    props.store(fos, "Properties für [deine appl]");
    fos.flush();
    fos.close();
  }
}
 
C

Curryhuhn

Gast
Vielen Dank für deine Antwort Niki. Das schaut sehr interessant aus.

Aus dem Hauptprogrammfenster lässt du dann ein neues JFrame erstellen und öffnen, in dem sich eine Maske für die Eingabe und/oder Änderung der Eigenschaften befindet?

Ich habe es mal so eingebaut und dazu noch ein paar Fragen. Beim Speichern der Settings schließt sich der Settings-Frame. Sollte man dann nicht auch gleich das Objekt mySettingsGUI im Hauptfenster zerstören? Wenn ja, wie mache ich das aus dem Settings-Frame heraus?

Gibt es vielleicht ansonsten noch Tipps oder Verbesserungsvorschläge?

Im Quelltext des Hauptfensters habe ich jetzt:
Code:
[...]
public void actionPerformed(ActionEvent event) {
        String command = event.getActionCommand();

        if (command.equals("Settings")) {
            mySettingsGUI = new MySettingsGUI();
            mySettingsGUI.showForm();
        }
[...]

Hier der Code der Settings-Klassen:
Code:
class MySettingsGUI extends JFrame implements ActionListener {

    private JTextField tf_Name;
    
    public MySettingsGUI() {
        super.setTitle("Settings");
    }

    public void showForm() {
        // Laden von MySettings
        try {
            File file = new File("settings/default.txt");
            MySettings.load(file);
        } catch (Exception e) {
            System.out.println("Fehler beim Laden: " + e.getMessage());
        }

        // Komponenten des GUI
        JPanel contentPane = new JPanel();
        JLabel label1 = new JLabel("Name:");
        tf_Name = new JTextField(MySettings.getProperty("name"), 10);
        JButton b_Save = new JButton("Okay");
        b_Save.addActionListener(this);

        contentPane.add(label1);
        contentPane.add(tf_Name);
        contentPane.add(b_Save);

        this.setContentPane(contentPane);
        this.pack();
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent event) {
        String command = event.getActionCommand();

        if (command.equals("Okay")) {
            try {
                String name = tf_Name.getDocument().getText(0, tf_Name.getDocument().getLength());
                MySettings.putProperty("name", name);
            } catch (Exception e) {
                System.out.println("Fehler beim Auslesen des Wertes: " + e.getMessage());
            }
            
            try {
                MySettings.store();
            } catch (Exception e) {
                System.out.println("Fehler beim Speichern: " + e.getMessage());
            }
            this.setVisible(false);
        }
    }
}

class MySettings {

    private static final Properties props = new Properties();
    private static File file = null;

    public static String getProperty(String key) {
        return props.getProperty(key);
    }

    public static void putProperty(String key, String value) {
        props.put(key, value);
    }

    public static void load(File file) throws Exception {
        MySettings.file = file;
        FileInputStream fis = new FileInputStream(file);
        props.load(fis);
        fis.close();
    }

    public static void store() throws Exception {
        FileOutputStream fos = new FileOutputStream(MySettings.file);
        props.store(fos, "Comments for MySettings");
        fos.flush();
        fos.close();
    }
}
 

Niki

Top Contributor
Eigentlich passt das schon, der Settings-Frame sollte aber ein JDialog sein, ist schöner, diesen solltest du dann mit dispose() schließen, dadurch werden die Resourcen wieder freigegeben. Dort wo du den Settings-Dialog erzeugst kannst du immer ein neues Objekt anlegen, du benötigst kein Attribut in deiner Frameklasse.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
Juelin Zugriff auf Bildschirmobjekte aus einem anderen Programm AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
G Interaktion mit einem Programm abschalten AWT, Swing, JavaFX & SWT 2
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben