2016-10-01 39 views
0

我試圖讓按鈕jugar驗證並從文本框和3個下拉框中返回值,必須有一種方法來驗證多個值,例如,登錄按鈕,當你輸入用戶名和密碼。如何在同一個按鈕上執行多個setOnAction JavaFX

這裏是代碼

 package application; 

     import javafx.scene.control.Button; 
     import javafx.scene.control.ChoiceBox; 
     import javafx.scene.control.TextField; 
     import javafx.application.Application; 
     import javafx.event.ActionEvent; 
     import javafx.event.EventHandler; 
     import javafx.geometry.Insets; 
     import javafx.stage.Stage; 
     import javafx.scene.Scene; 
     import javafx.scene.layout.BorderPane; 
     import javafx.scene.layout.GridPane; 
     import javafx.scene.layout.StackPane; 


     public class Main extends Application implements EventHandler<ActionEvent>{ 

     // crea los botones 
     Button historial; 
     Button jugar; 

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

@Override 
//nombre de la ventana principal 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("Football Simulator 2016"); 

這裏落名單

//crea los drop list 
    ChoiceBox<String> jugadasArbitro = new ChoiceBox<>(); 
    jugadasArbitro.getItems().addAll("Saque de banda","Tiro de esquina","Falta","Falta(Tarjeta amarilla)", "Falta (Tarjeta roja)", "Mano","Posicion adelantada","Penal","Fuera de juego", "Gol"); 
    ChoiceBox<String> jugadasOfensivas = new ChoiceBox<>(); 
    jugadasOfensivas.getItems().addAll("Pase","Pase largo","Tiro a puerta"); 
    ChoiceBox<String> jugadasDefensivas = new ChoiceBox<>(); 
    jugadasDefensivas.getItems().addAll("Intercepcion"); 

這裏我有setOnAction聽衆

//inicializa botones 
    TextField tiempo = new TextField(); 
    historial = new Button("Historial"); 
    historial.setOnAction(this); 
    jugar= new Button("Jugar"); 
    jugar.setOnAction(e -> isInt(tiempo,tiempo.getText())); 
    jugar.setOnAction(e -> getArbitro(jugadasArbitro)); 
    jugar.setOnAction(e -> getOfensiva(jugadasOfensivas)); 
    jugar.setOnAction(e -> getDefensa(jugadasDefensivas)); 

    //forma del Gui y posiciona los botones 
    GridPane grid = new GridPane(); 
    grid.setPadding(new Insets(10,10,10,10)); 
    grid.setVgap(8); 
    grid.setHgap(10); 
    GridPane.setConstraints(historial, 1, 3); 
    GridPane.setConstraints(jugar, 2, 2); 
    GridPane.setConstraints(jugadasArbitro, 3, 3); 
    GridPane.setConstraints(jugadasOfensivas, 3, 4); 
    GridPane.setConstraints(jugadasDefensivas, 3, 5); 
    grid.getChildren().addAll(historial, jugadasArbitro,jugadasDefensivas,jugadasOfensivas,jugar,tiempo); 

    //tamanio de la ventana 
    Scene scene = new Scene(grid, 540,300); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

讀取下拉框值的方法

//leen el valor de los drop box 
private void getDefensa(ChoiceBox<String> jugadasDefensivas) { 
    // TODO Auto-generated method stub 
    String opcionDefensa = jugadasDefensivas.getValue(); 
    System.out.println(opcionDefensa); 
} 

private void getOfensiva(ChoiceBox<String> jugadasOfensivas) { 
    // TODO Auto-generated method stub 
    String opcionOfensiva = jugadasOfensivas.getValue(); 
    System.out.println(opcionOfensiva); 
} 

private void getArbitro(ChoiceBox<String> jugadasArbitro) { 
    // TODO Auto-generated method stub 
    String opcionArbitro = jugadasArbitro.getValue(); 
    System.out.println(opcionArbitro); 
} 

//valida que el tiempo solo sea INT 
private boolean isInt(TextField tiempo, String message) { 
    // TODO Auto-generated method stub 
    try{ 
     int minutos = Integer.parseInt(tiempo.getText()); 
     return true; 
    }catch (NumberFormatException e){} 
    System.out.println("Error: introduzca numeros solamente"); 
    return false; 

} 

@Override 
public void handle(ActionEvent event) { 


} 

} 

回答

0

你就不能擁有這一切在一個OnActionHandler?或者,如果您希望它只處理其中一個變量,則會確定要測試哪個變量(將通過其他事件和交互進行更改)。

jugar.setOnAction(e ->{ 
    isInt(tiempo,tiempo.getText()); 
    getArbitro(jugadasArbitro); 
    getOfensiva(jugadasOfensivas); 
    getDefensa(jugadasDefensivas); 
}); 

OR

jugar.setOnAction(e -> { 
    if(method == 1) 
    { 
     isInt(tiempo,tiempo.getText()); 
    } 
    else if(method == 2) 
    { 
     getArbitro(jugadasArbitro); 
    } 
    else if(method == 3) 
    { 
     getOfensiva(jugadasOfensivas); 
    } 
    else if(method == 4) 
    { 
     getDefensa(jugadasDefensivas); 
    } 
}); 

只是取決於你怎麼需要它。

0

好吧,這很簡單,只需要設置.OnAction(e - > {(whatever)}); 例如:

jugar.setOnAction(e ->{ isInt(tiempo,tiempo.getText()); 
    getArbitro(jugadasArbitro); 
    getOfensiva(jugadasOfensivas); 
    getDefensa(jugadasDefensivas); 
    }); 
相關問題