2017-05-27 26 views
-2

私は行列のパラメータを入力する1つのJFrameを持っています。これらのパラメータが入力された後、ユーザーはシミュレーションを開始するためにボタンをクリックすることになっています。問題は、メッセージが書き込まれているJOptionペインを開くために、ボタンが1回ではなく2回クリックされることです。私はちょうどこれがなぜ起こるか把握できません。この場合シングルの代わりにダブルクリックするのはなぜですか?

private void setMatrixParameters(){ 
    if(tfTouristNumber.getText().equals("") || tfRowNumber.getText().equals("") || tfColumnNumber.getText().equals("") || tfMinimal.getText().equals("")){ 
     JFrame frame = new JFrame(); 
     JOptionPane.showMessageDialog(frame, "All fields must be filled", "Error!", JOptionPane.ERROR_MESSAGE); 
    } 

    //check the matrix dimensions 
    else if(min + touristNumber > Integer.parseInt(tfRowNumber.getText()) * Integer.parseInt(tfColumnNumber.getText())){ 
     int dimension= min + touristNumber; 
     JFrame frame = new JFrame(); 
     JOptionPane.showMessageDialog(frame, "Matrix dimensions too small. Need to be at least:" + dimension, "Enlarge matrix!", JOptionPane.ERROR_MESSAGE); 
    } 

    else{ 
     this.touristNumber = Integer.parseInt(tfTouristNumber.getText()); 
     int row = Integer.parseInt(tfRowNumber.getText()); 
     int column = Integer.parseInt(tfColumnNumber.getText()); 
     this.matrix = new Object[row][column]; 
     this.min = Integer.parseInt(tfMinimal.getText()); 
    } 
} 
+0

あなたが投稿したコードのいずれも、クリックとは関係ありません。 –

+0

@ CrushaK.Rool私は知っていますが、私は実行されたアクションから呼び出されたものは何もありません。私のアプリケーションの他のボタンと同じように、ワンクリックで動くはずです。私は問題を理解できません。 – ivana14

+0

あなたが何をしたいのかがわかりません。あなたが掲示したコードだけで、そのボタンをクリックするだけで、いくつかのテキストフィールドの入力を検証し、ローカルフィールドに読み込むだけです。そのボタンを何回クリックしても、それはすべて起こります。 –

答えて

1

あなたの問題は、あなたが第二のifの条件でのテキストフィールドの値をチェックしていないということです。これは、シミュレーションボタンのアクションを行っ関数から呼び出される関数です。以下は、そのトリックを行う必要があります。

private void setMatrixParameters(){ 
    if(tfTouristNumber.getText().equals("") || tfRowNumber.getText().equals("") || tfColumnNumber.getText().equals("") || tfMinimal.getText().equals("")){ 
     JFrame frame = new JFrame(); 
     JOptionPane.showMessageDialog(frame, "All fields must be filled", "Error!", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 

    // Read values here. (Should probably add a try-catch block around this, in case it can't be parsed as number) 
    int inTouristNumber = Integer.parseInt(tfTouristNumber.getText()); 
    int inRow = Integer.parseInt(tfRowNumber.getText()); 
    int inColumn = Integer.parseInt(tfColumnNumber.getText()); 
    int inMin = Integer.parseInt(tfMinimal.getText()); 

    //check the matrix dimensions 
    if(inMin + inTouristNumber > inRow * inColumn){ 
     int dimension= inMin + inTouristNumber; 
     JFrame frame = new JFrame(); 
     JOptionPane.showMessageDialog(frame, "Matrix dimensions too small. Need to be at least:" + dimension, "Enlarge matrix!", JOptionPane.ERROR_MESSAGE); 
    } 
    else{ 
     this.touristNumber = inTouristNumber; 
     this.matrix = new Object[inRow][inColumn]; 
     this.min = inMin; 
    } 
} 
+0

それは動作します!ありがとう! – ivana14

関連する問題