2016-04-25 9 views
1

8つのJButtonを持つJPanelウィンドウを作成するプログラムを作成します。 JButtonsを繰り返す代わりに、私はすべてのJButtonを持つ配列を作成し、ループを作成してそれらを作成しました。しかし、私は配列を作成して以来、コンストラクタはループが終了した後には進まないでしょう。 JButtonを配列にするまでこれは起こりませんでした。コンストラクタの実行が終了するのを防ぐjava Jbutton配列

public class Gui extends JFrame { 

private JButton Subject[] = new JButton[7]; 
private String SubjNames[] = {"Length", "Mass", "Currency", "Temperature", "Time", "Speed", "Data", "Cooking"}; 

private int SubjectLocX = 40; 
private int SubjectLocY = 50; 




public Gui(){ 

    super("Converter"); 
    setLayout(null); 

    System.out.println("yes"); 

    for (int i = 0; i<8; i++) { 
    Subject[i] = new JButton(SubjNames[i]); 
    Subject[i].setLocation(SubjectLocX,SubjectLocY); 
    Subject[i].setSize(200,50); 
    add(Subject[i]); 
    if (i < 3) { 
     SubjectLocX = 40; 
     SubjectLocY += 100; 
    } else if (i == 3) { 
     SubjectLocY = 50; 
    } else if (i > 3) { 
     SubjectLocX = 330; 
     SubjectLocY += 100; 
     } 
    } 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(600,500); 
    setLocation(400,200); 
    setVisible(true); 



    } 
} 

はい、必要なものすべてをインポートしました。クラスのオブジェクトを別のクラスに作成しました。実行されますが、コンストラクタはループの後に続かないでしょう。配列 "Subject [i]"を含む行を削除すると、コンストラクタは終了し、ウィンドウは表示されますが、配列では表示されません。なぜ??

+0

を呼び出すことを忘れないでくださいあなたは 'new JButtonとして配列を宣言する[7]'は7つの要素しか割り当てられていないことを意味します – MadProgrammer

答えて

2

あなたが7要素のJButton配列を持っていて、そのうちの8要素を初期化しようとしているからかもしれません。宣言をprivate JButton Subject[] = new JButton[8]に変更すると修正されます。

+0

うわー私は愚かな笑を感じます – airide101

+0

心配しないでください。どういたしまして :) – MingiuX

0

あなたのコードは、私にとってworkinfであなただけのループ「のために」に範囲外の配列を持っていた、条件がfor (int i = 0; i<7; i++)なければならないが、他のすべてが動作している、とき、覚えている「new Gui().setVisible(true);

関連する問題