Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class GamePanel extends JPanel {
public static void main(String[]args) {
new GamePanel(800, 600);
}
public GamePanel (int w, int h) {
this.setPreferredSize(new Dimension(w, h));
//Viel mehr Code
}
}
Wieso referenziert man da GamePanel nicht ganz normal mit
Vermute mal, dass GamePanel noch extends JFrame oder ähnliches hat.
Das erzeugen startet dann die GUI auf dem neue EDT Thread. Aus diesem Grunde braucht man keine Referenz in der Main.
Wieso man setPrefferedSize jetzt auf dem Objekt aufruft oder direkt im Konstruktor ist eigentlich egal bzw. eine Designentscheidung. Aber das GamePanel sollte ja schon selber seine Größe kennen, oder?
der setPreferredSize()-Aufruf ist hier ja etwas unabhängig davon, ob der Aufrufer eine Variable anlegt oder nicht,
stell dir vor 12 Klassen müssen derartige Objekte erstellen, sollen die dann alle denselben setPreferredSize()-Aufruf dazuschreiben?
was die Klasse selber kann ohne Aufrufer, darf ruhig schon im Konstruktor stehen
'Instanzierung ohne Referenz' macht dann Sinn, wenn das Objekt von sich aus selber agiert, z.B. einen Thread startet
oder wie hier im Falle eines (J)Frames sich selber auf den Bildschirm zaubert usw.
oder einfach nur nach Ende des Konstruktors gar nicht mehr benötigt wird, weil die Aktion fertig ist
Hm ich schreib das gar nicht hab das nur gelesen ... und hab mich gewundert 1. Dass soetwas überhaupt funktioniert und 2. Wieso man das macht (Könnte ja einen Grund haben)!
Danke für die schnellen anrworten!
Luk :toll
Edit:
Noch mal so eine ähnliche Frage:
Java:
public class Sprite {
public Sprite (double x, double y) {
this.x = x;
this.y = y;
}
}
Was genau ist denn hier
Code:
this.x
und
Code:
this.y
? Sie wurden an keiner Stelle in der Klasse als Instanzvariablen deklariert!
Kann man das so sagen anstatt double x und double y als Instanzvariavle zu schreiben und deklarieren?
nein, so wie es da steht ist es definitiv falsch. Entweder da fehlt die Deklaration der Variablen, oder aber die Klasse erbt sie von einer anderne Klasse, dann würde allerdings das extends xxxx fehlen... ;(