2017-10-26 24 views
1

私はちょうどjavaを使い始めています。私は新しいGUIに取り組んでいました。私は自分のJFrameを作るメソッドを作って、デフォルトの位置、クローズオペレーション、背景色などを設定しました。公開メソッドで開始されたオブジェクトを解決できませんか?

私は、これを別の方法で作成しました。私はすでにメインメソッドにこれらのすべてのものを入れておけば、このメソッドを解決する方法を知っています。

これはコードです:私は、「メインウィンドウ」は解決できないと言って私のメインメソッドでエラーが発生します

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); 
    } 
} 

。どうしてこれなの?他のメソッドでmainWindowオブジェクトを作ったからでしょうか? makeWindow()メソッドのすべてをメインメソッドに入れずにこの問題を解決する方法はありますか?

+1

mainWindowは、makeWindow()メソッドに対してローカルです。それはすべて範囲についてです。 –

+1

ここにスコープの外部ガイドがあります:http://www.geeksforgeeks.org/variable-scope-in​​-java/ – Compass

+0

mainWindowはローカルですが、mainWindowはオブジェクトであることに気付きました。インスタンスオブジェクトを作成するにはどうすればいいですか?私はすでにそれぞれのメソッドの外でインスタンス変数を宣言できることを知っていますが、オブジェクトに対して同じようにすることはできますか? – Psear

答えて

1

mainWindowは、makeWindowメソッドのコンテキスト内にのみ存在するため、動作しません。 @Xingとして

がコメントし

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(クレジット共有)、あなたはmakeWindow方法からmainWindowを返すことができます:

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

ありがとうございます!私のためにそれを明確にしました! – Psear

+1

また、mainWindowをmakeWindow()メソッドから戻して、メインメソッドの変数に代入することもできます。 – Xing

+0

ああ、私はそれを考えていませんでした。ありがとう! – Psear

0

作成あなたはそれの代わりに、静的フィールドにすることができますmainWindowインスタンス/グローバル参照

private static JFrame mainWindow; 

public static void makeWindow(){ 
    mainWindow = new JFrame(); 
} 
関連する問題