JFrame wird nicht richtig angezeigt

Hallo,

1) Warum wird mir hier die Warnung "The serializable class AutoFrame does not declare a static final serialVersionUID field of type long"angezeigt?
Bzw., warum braucht man hier diese Zeile "private static final long serialVersionUID = 1L;" um die Warnung verschwinden zu lassen?

2) Warum wird beim Aufruf von JFrame frame = new AutoFrame(); nicht die Größe auf (500,500) gesetzt und auch nicht das Fenster zentriert?

Java:
import javax.swing.JFrame;

public class AutoFrame extends JFrame{

   
    public AutoFrame() {
        JFrame frame = new JFrame();
        frame.setTitle("Auto Frame");
        frame.setSize(500,500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setAlwaysOnTop(false);
    }
}


import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class GuiDemo {

    public static void main(String[] args) {

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
                | UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        JFrame frame = new AutoFrame();
        frame.setVisible(true);
    }
}
 
1) Warum wird mir hier die Warnung "The serializable class AutoFrame does not declare a static final serialVersionUID field of type long"angezeigt?
Bzw., warum braucht man hier diese Zeile "private static final long serialVersionUID = 1L;" um die Warnung verschwinden zu lassen?
Jede serialisierbare Klasse bekommt eine Versionsnummer mitgegeben, damit man beim Deserialisieren erkennen kann, ob die überhaupt zueinander passen.
Es wird auch eine Standardmäßig generiert, die ist aber quasi ein Hashcode der Klasse - änderst du irgendwas in einer Methode, würde sich auch die version ändern, auch wenn es immer noch kompatibel ist.

Deshalb solltest du eine eigene setzten, und die jeweils anpassen, wenn es inkompatible Änderungen gibt.


2) Warum wird beim Aufruf von JFrame frame = new AutoFrame(); nicht die Größe auf (500,500) gesetzt und auch nicht das Fenster zentriert?
Du erstellst das Frame AutoFrame, und in dem erstellst du eine neues zusätzliches JFrame, dessen Größe du setzt - du hast also zwei Frames: einmal das erzeugte AutoFrame und das zusätzliche JFrame. Das AutoFrame setzt du visible, und für das andere setzt die die Größe etc

AutoFrame sollte nicht von JFrame erben - der Teil aus dem AutoFrame-Konstuktor kann einfach in die Main verschoben werden.
 

Neue Themen


Zurück
Oben