2014-07-20 3 views
4

Je suis assez nouveau sur JavaFX. J'ai chargé avec succès un site Web dans mon application JavaFX. Je souhaite me connecter au site Web à partir de mon application Java. Jusqu'à présent, je suis en mesure d'insérer mes valeurs de connexion à la zone de saisie appropriée, mais je n'arrive pas à comprendre comment cliquer sur le bouton Soumettre. Est-ce que quelqu'un peut m'aider. Voici ce que j'ai jusqu'ici. enter image description hereComment cliquer sur un bouton sur un site Web chargé dans JavaFX Webengine

Voici ma classe de contrôleur.

public class Controller implements Initializable{ 


    @FXML 
    protected TextField usernameLogin; 
    @FXML 
    protected TextField passwordLogin; 
    @FXML 
    protected Button loginButton; 
    @FXML 
    protected WebView webviewBrowser; 
    @Override 
    public void initialize(URL location, ResourceBundle resources) { 

     final WebEngine engine = webviewBrowser.getEngine(); 
     engine.load("http://gmail.com"); 
     engine.setJavaScriptEnabled(true); 

     loginButton.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 


       String username = usernameLogin.getText().toString(); 
       String password = passwordLogin.getText().toString(); 

       engine.getDocument().getElementById("Email").setAttribute("Value", username); 
       engine.getDocument().getElementById("Passwd").setAttribute("Value", password); 

       //engine.getDocument().getElementById("submit"). ??submit code?? 

      } 
     }); 


    } 
} 

Quelqu'un peut-il m'aider? Que dois-je faire pour soumettre? Merci.

Répondre

3

J'ai trouvé ce lien avec un exemple de travail avec des formulaires html dans le composant WebView de JavaFX: https://community.oracle.com/thread/2510161?start=0&tstart=0.

L'exemple ci-dessous va obtenir une référence au formulaire et l'envoyer.

Je n'étais pas en mesure d'obtenir réellement gmail pour charger complètement à l'intérieur du composant WebView parce que d'une erreur de jfxwebkit.dll.

import java.util.concurrent.atomic.AtomicBoolean; 

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.concurrent.Worker; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 
import org.w3c.dom.Element; 
import org.w3c.dom.html.HTMLFormElement; 

public class Main extends Application { 
    @Override 
    public void start(Stage stage) throws Exception { 
     stage.setTitle("JavaFX WebView Example"); 
     BorderPane borderPane = new BorderPane(); 
     WebView webviewBrowser = new WebView(); 
     borderPane.setCenter(webviewBrowser); 
     final WebEngine engine = webviewBrowser.getEngine(); 
     engine.load("http://gmail.com"); 
     engine.setJavaScriptEnabled(true); 
     final String username = "[email protected]"; 
     final String password = "password"; 
     final AtomicBoolean submitted = new AtomicBoolean(); 
     engine.getLoadWorker().stateProperty().addListener(
       new ChangeListener<Worker.State>() { 
        @Override 
        public void changed(ObservableValue<? extends Worker.State> ov, 
             Worker.State oldState, Worker.State newState) { 
         if (newState == Worker.State.SUCCEEDED) { 
          Element emailField = engine.getDocument().getElementById("Email"); 
          if (emailField != null) { 
           emailField.setAttribute("Value", username); 
          } 
          Element passwordField = engine.getDocument().getElementById("Passwd"); 
          if (emailField != null) { 
           passwordField.setAttribute("Value", password); 
          } 
          HTMLFormElement gaia_loginform = (HTMLFormElement) engine.getDocument().getElementById("gaia_loginform"); 
          if (gaia_loginform != null) { 
           if (!submitted.get()) { 
            submitted.set(true); 
            gaia_loginform.submit(); 
           } 
          } 
         } 
        } 
       } 
     ); 
     stage.setScene(new Scene(borderPane, 800, 600)); 
     stage.show(); 
    } 
} 
+1

Merci pour votre effort Tunabot. –

+0

Avez-vous déjà ressenti une sorte de «rafraîchissement» ou de chargement multiple de la page? Je fais presque la même chose, et une seconde après le soumettre, le code recommence à SCHEDULED, RUNNING, SUCCEDED ... – vault

+0

Ok, j'ai découvert que la définition d'un élément ou la soumission d'un formulaire générait des événements "change". – vault

Questions connexes