2016-04-17 125 views
0

我有這個任務,使一個遊戲稱爲「猜數字」。用戶猜測一個介於1和1000之間的數字,點擊「確定」並收到一條消息,說明它是否正確,太高或太低。我的問題是事件處理。當我按「OK」時,程序崩潰。我究竟做錯了什麼?Java按鈕eventhandeling

package application; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 

public class GjettTalletSpill extends Application implements EventHandler<ActionEvent> { 

Button ok; 
Label text; 
Label message; 
TextField TF; 

public static void main(String[] args) { 
    launch(args); 


}// Main. 

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("Gjett tallet spill"); 

    ok = new Button("OK"); 
    ok.setOnAction(this); 
    ok.setPrefSize(100,20); 
    text = new Label("Guess a number between 1 and 1000: "); 
    TF = new TextField(); 
    message = new Label(""); 

    GridPane gp = new GridPane(); 

    gp.add(text,1,1); 
    gp.add(TF,3,1); 
    gp.add(message,2,2); 
    gp.add(ok,2,3); 

    Scene scene = new Scene(gp,600,150); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

} 


@Override 
public void handle(ActionEvent event) { 

    int uGuessed; 
    int theNumber; 

    tallet = 1 + (int)(Math.random() * 1000); 
    uGuessed = Integer.parseInt(TF.getText()); 

    while (uGuessed != theNumber){ 

     if (uGuessed<theNumber){ 
      message.setText("The number was too low. Try again!"); 
     } else { 
      message.setText("The number was too high. Try again!"); 

     }// if/else. 
    }// while. 

    message.setText("Congratulations! You guessed the roght number! :D"); 
}// ActionEvent. 

}// Class. 
+1

你有什麼異常?請張貼 –

+1

什麼是「tallet」?此外while循環根本沒有任何意義......你永遠不會改變循環體內條件的任何值。 – fabian

+0

不會出現異常。它只是凍結.. – Je9

回答

0

當然你的程序凍結了。當您按下按鈕時,程序會調用句柄函數並且永遠不會返回(除非您在第一次嘗試時輸入了正確的編號)。所以你的程序會卡住處理事件和電子郵件。 G。將不再調用repaint-method。

只要刪除while循環。請記住,每次按下確定按鈕時都會調用您的句柄方法。所以不要在句柄方法中生成你的隨機數。移動

private int theNumber; 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     theNumber = 1 + (int) (Math.random() * 1000); 

在啓動方法的頂部,一旦啓動應用程序就會生成一個隨機數。

並替換您的操作處理程序,以便它只會檢查一次該數字,更新消息標籤,然後返回。

@Override 
    public void handle(ActionEvent event) { 
     int uGuessed; 
     uGuessed = Integer.parseInt(TF.getText()); 

     if (uGuessed < theNumber) { 
      message.setText("The number was too low. Try again!"); 
     } else if (uGuessed > theNumber) { 
      message.setText("The number was too high. Try again!"); 
     } else { 
      message.setText("Congratulations! You guessed the roght number! :D"); 
     } // ActionEvent. 
    } 

和你的程序應該工作:)。

+0

非常感謝你!保存我的一天:D – Je9