2016-11-21 12 views
0

Java(JavaFx)からJavaScriptに変数を渡すにはどうすればよいですか?私はexecuteScriptを使用しなければならないと思うが、実際にどのように使用するのかは分からない。基本的に私はarraylistの要素をjavaからarrayにjavaScriptで送信するプログラムにしたいと思います。以下のコードは、私が書いたJavaコードです。誰かが私を助けてくれることを願っている。前もって感謝します。JavaFXとJavaScriptの間で変数を渡すにはどうすればよいですか?

import java.util.ArrayList; 
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.layout.VBox; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

public class UserInterface extends Application{ 
    Button btn_js; 

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

    @Override 
    public void start(Stage stage) throws Exception { 
     WebView myWebView = new WebView(); 
     WebEngine engine = myWebView.getEngine(); 
     ArrayList<String> arr = new ArrayList<String>(); 
     btn_js = new Button("fire js"); 
     btn_js.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       //engine.executeScript("something goes here to transfer data to js"); 
     } 
     }); 
     VBox root = new VBox(); 
     root.getChildren().addAll(myWebView, btn_js); 
     Scene scene = new Scene(root, 500, 500); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

答えて

0

executeScriptとお考えください。

例えば、渡された配列に何かを行うjavascript関数を書くことができます。配列をJavaからJavascriptに渡すには、Javascript形式に変換する必要があります(手動またはJSonなどを使用します)。ここ

JavaScript関数が渡される配列をループし、作成し、各要素について警告するであろうloadContent使用してロードされる:ここ

は一例です。 Java側では、各アラートはsetOnAlertを使用して出力されます。 JavaFXのボタンを押してオン

、関数は、次のように実行されます。

transformToJavascriptArrayは(私は手動でこれをやっている)Javascript配列へのJava Listを変えていく
myWebView.getEngine().executeScript("printArray(" + transformToJavascriptArray(arr) + ")")); 

public class UserInterface extends Application { 
    Button btn_js; 

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

    @Override 
    public void start(Stage stage) throws Exception { 
     WebView myWebView = new WebView(); 

     myWebView.getEngine().loadContent("<html>\n" 
         + " <script>function printArray(arr) {" 
         + "for (i = 0; i < arr.length; i++) {" 
         + " window.alert(arr[i]);" 
         + "}" 
         + "} </script> " 
         + " </body>\n" 
         + "</html>"); 

     List<String> arr = new ArrayList<String>(); 
     arr.add("Dog"); 
     arr.add("Cat"); 

     btn_js = new Button("fire js"); 
     btn_js.setOnAction(e -> myWebView.getEngine().executeScript("printArray(" + transformToJavascriptArray(arr) + ")")); 

     myWebView.getEngine().setOnAlert(event -> System.out.println("JS alert: " + event.getData())); 

     VBox root = new VBox(); 
     root.getChildren().addAll(myWebView, btn_js); 
     Scene scene = new Scene(root, 500, 500); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    private String transformToJavascriptArray(List<String> arr) { 
     StringBuffer sb = new StringBuffer(); 
     sb.append("["); 

     for (String str : arr) 
      sb.append("\"").append(str).append("\"").append(", "); 

     if (sb.length() > 1) 
      sb.replace(sb.length() - 2, sb.length(), ""); 

     sb.append("]"); 

     return sb.toString(); 
    } 
} 
+0

ありがとう、DVarga。私はあなたの例に従ってプログラムを作っていきます。 – zxc34

関連する問題