2017-10-26 8 views
1

Ich beginne gerade mit Java und ich arbeitete an einer neuen GUI. Ich machte eine Methode, die meinen JFrame bildet, seinen Standardstandort, nahen Betrieb, Hintergrundfarbe etc. einstellt.Kann ein Objekt, das in einer öffentlichen Methode initiiert wurde, nicht aufgelöst werden?

Ich machte eine getrennte Methode für dieses, um es aus dem Hauptcode für Ordnung herauszuhalten. Ich weiß bereits, wie ich diese Methode lösen kann, wenn ich all diese Dinge in die Hauptmethode lege.

Dies ist der Code:

public class Main { 

    public static void makeWindow(){ 
     JFrame mainWindow = new JFrame(); 
     mainWindow.setVisible(true); 
     mainWindow.setPreferredSize(new Dimension(400,400)); 
     mainWindow.pack(); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setLocationRelativeTo(null); 
    } 

    public static void main(String args[]){ 
     makeWindow(); 
     JPanel mainPanel = new JPanel(); 
     mainWindow.add(mainPanel); 
    } 
} 

ich einen Fehler in meiner Haupt-Methode erhalten, dass „Mainwindow“ kann nicht aufgelöst werden. Warum ist das? liegt es daran, dass ich das mainWindow-Objekt in der anderen Methode erstellt habe? Gibt es eine Möglichkeit, dieses Problem zu beheben, ohne alles von der makeWindow() - Methode in die Hauptmethode zu übernehmen?

+1

mainWindow ist lokal für die Methode makeWindow(). Es geht nur um den Umfang. –

+1

Hier ist eine externe Anleitung für den Bereich: http://www.geeksforgeeks.org/variable-scope-in-java/ – Compass

+0

Ich bemerkte, dass mainWindow lokal war, aber mainWindow ist ein Objekt, wie kann ich ein Instanzobjekt erstellen? Ich weiß bereits, dass ich Instanzvariablen außerhalb ihrer jeweiligen Methoden deklarieren kann, aber wie kann ich das gleiche für ein Objekt tun? – Psear

Antwort

1

Das wird nicht funktionieren, weil mainWindow nur im Kontext Ihrer makeWindow Methode existiert. Sie können es sich um ein statisches Feld stattdessen machen:

public class Main { 

    private static JFrame mainWindow; // declare it here so it can be seen from your main method. 

    public static void makeWindow(){ 
     mainWindow = new JFrame(); 
     mainWindow.setVisible(true); 
     mainWindow.setPreferredSize(new Dimension(400,400)); 
     mainWindow.pack(); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setLocationRelativeTo(null); 
    } 

    public static void main(String args[]){ 
     makeWindow(); 
     JPanel mainPanel = new JPanel(); 
     mainWindow.add(mainPanel); 
    } 
} 

EDIT

Als @Xing kommentiert (Kredite gemeinsam), können Sie die mainWindow von Ihrem makeWindow Methode zurück:

public class Main { 

    public static JFrame makeWindow(){ 
     JFrame mainWindow = new JFrame(); 
     mainWindow.setVisible(true); 
     mainWindow.setPreferredSize(new Dimension(400,400)); 
     mainWindow.pack(); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setLocationRelativeTo(null); 
     return mainWindow; 
    } 

    public static void main(String args[]){ 
     JFrame mainWindow = makeWindow(); 
     JPanel mainPanel = new JPanel(); 
     mainWindow.add(mainPanel); 
    } 
} 
+0

Vielen Dank! Klar für mich! – Psear

+1

Sie können auch das mainWindow von der makeWindow() Methode zurückgeben und es einer Variablen in der Hauptmethode – Xing

+0

zuweisen. Oh ja, das hatte ich nicht. Vielen Dank! – Psear

0

erstellen mainWindow-Instanz/Referenz global

private static JFrame mainWindow; 

public static void makeWindow(){ 
    mainWindow = new JFrame(); 
} 
Verwandte Themen