Position eines Fenster speichern?

flashray

Erfahrenes Mitglied
Hallo Freunde,

ich möchte in meinem Programm die Position eines Frames speichern. Hierzu verwende ich die Methode componentmoved vom Componentlistener, welcher die x und y Koordinaten in zwei Variablen speichert. Das Problem hierbei ist, tue ich das Fenster maximieren wird componentmoved auch ausgeführt, und die Werte werden durch die Koordinaten der linken obigen ecke überschrieben.

Hat jemand ne Idee wie ich das abfangen könnte? Eine if Bedingung in der componentmoved Methode welche vor dem speichern der neuen Werte überprüft ob das Fenster maximiert ist hilft leider nicht.

Vg Erdal
 
Hallo!

Eigentlich reicht es doch die Position des Fensters beim schließen zu speichern und beim öffnen zu laden.
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.Point;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;

import javax.swing.JFrame;

/**
 * @author Tom
 * 
 */
public class RememberWindowPositionExample extends JFrame {

    static Preferences preferences = Preferences
            .systemNodeForPackage(RememberWindowPositionExample.class);

    final static String WINDOW_LOCATION = "WINDOW_LOCATION";

    public RememberWindowPositionExample() {
        super("RememberWindowPositionExample");
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                Point location = e.getWindow().getLocation();
                preferences.putLong(WINDOW_LOCATION, 
                        ((long) location.x) << 32 | location.y);
                System.exit(0);
            }
        });

        long windowPosition = preferences.getLong(WINDOW_LOCATION, 0);
        int x = (int) (windowPosition >> 32);
        int y = (int) windowPosition;

        super.setLocation(x, y);

        setSize(320, 240);
        setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new RememberWindowPositionExample();
    }
}

Gruß Tom
 
Hallo Tom,

soweit ist das ja kein Problem. Tue ich das Fenster maximimieren und beenden. Wird die Position 0,0 gespeichert. Ich möchte aber das der vorherige Wert erhalten bleibt. So daß wenn ich dass Programm neustarte das Fenster wieder maximiert geöffnet wird. Wenn ich dann auf verkleinern klicke soll er die Position bekommen die er vor dem Maximieren bei der letzten Nutzung hatte.

------------------
Beispiel

Initialwerte(50,50)

1. Start

Position (50,50)

Verschoben

Position (200,450)

Maximiert

Position (0,0)

Ende (gespeichert werden soll 200,450)

2. Nächster Start

setze Position (200,450)

starte aber Maximiert

dann wird zunächst die Position natürlich (0,0) sein da maximiert

beim verkleinern wird er jedoch auf die Pos(200,450) verschoben

...

-------------

Ich werde es mal so versuchen, das immer die letze und vorletze Position gespeichert werden.

Wenn dann beim nächsten Start der eine Wert 0,0 enstpricht, nehme ich den vorigen. So müsste es theoretisch klappen. Mal schaun.

Vg Erdal
 
Zurück