【问题标题】:Capture Url Image JavaFX捕获 URL 图像 JavaFX
【发布时间】:2015-12-21 18:13:19
【问题描述】:

我有一个 web 视图,我可以在其中查看来自研究的图像(使用自定义搜索 API),通过单击其中一个(一次或两次无关紧要,我需要了解这个概念)我应该能够捕捉到他的Url 和 hten 关闭 webview 。目前,Url 图像是静态的,并且使用 ArrayList 进行管理,因为我在另一个类中进行研究,下一步也是最后一步是将 webview 集成到 Jframe 中,但这将是另一个问题。那么,我怎样才能得到那个 URL?

代码如下:

import java.util.ArrayList;
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;


public class WebViewSample extends Application {
    private Scene scene;
    @Override public void start(Stage stage) {
        // create the scene
        stage.setTitle("Web View");
        scene = new Scene(new Browser(),750,500, Color.web("#666970"));
        stage.setScene(scene);
        //scene.getStylesheets().add("webviewsample/BrowserToolbar.css"); 

        stage.show();

//        scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
//            @Override
//            public void handle(MouseEvent mouseEvent) {
//                System.out.println("mouse click detected! " + mouseEvent.getSource());
//            }
//        });
    }

    public static void main(String[] args){
        launch(args);
    }
}
class Browser extends Region {

    final WebView browser = new WebView();
    final WebEngine webEngine = browser.getEngine();

    public Browser() {
        //apply the styles
        getStyleClass().add("browser");
        // load the web page
        int i=0;
        //webEngine.load("https://www.google.it/earth/images/products_mobile.png");

        String first ="<html> <body>";
        String fin ="</body>  </html>";
        String complete = "";


        ArrayList<String> test = new ArrayList<>();
        test.add("http://www.google.it/events/images/speakers_global/marco_polillo.jpg");
        test.add("https://www.google.it/earth/images/products_mobile.png");



        complete = complete.concat(first);
        for(int j = 0; j< test.size(); j++)
        {

            complete = complete.concat("<img src=");
            complete = complete.concat(test.get(j));
            complete = complete.concat(" style= padding:10px; margin:20px; display:inline-block; margin: 0px 12px 12px 0px; overflow: ; position: relative; vertical-align: top; z-index: 5; height:200px width:auto border:6px solid red>");



        }


        complete = complete.concat(fin);

        browser.getEngine().loadContent(complete);


        //add the web view to the scene
        getChildren().add(browser);


    }
    private Node createSpacer() {
        Region spacer = new Region();
        HBox.setHgrow(spacer, Priority.ALWAYS);
        return spacer;
    }

    @Override protected void layoutChildren() {
        double w = getWidth();
        double h = getHeight();
        layoutInArea(browser,0,0,w,h,0, HPos.CENTER, VPos.CENTER);
    }

    @Override protected double computePrefWidth(double height) {
        return 750;
    }

    @Override protected double computePrefHeight(double width) {
        return 500;
    }




}

【问题讨论】:

    标签: image url webview javafx


    【解决方案1】:

    对图像的点击发生在网页本身中,您不会在 JavaFX 部分中获得任何点击事件,因此您可以处理它。您可以做的是有一个 JavaScript 函数,当单击图像时,该函数会在您的 Java 代码中调用一个方法。在 JavaScript 中,您可以完全访问文档,并且可以确定点击了哪个图像。

    这里是你需要建立桥梁的部分:

    public class Bridge{
        WebEngine engine;    // add a new field
    
        public Bridge(WebEngine engine){
            this.engine = engine;
        }
        public void clickedOnImage(String imageUrl) {
            // TODO fill in your logic
        }
    
    }
    
    // In your Browser class Constructor
    JSObject jsobj = (JSObject) engine.executeScript("window");
    jsobj.setMember("java", new Bridge(engine));   // pass it here
    

    然后你可以在你的 JavaScript 代码中调用这个 Java 方法:

    var imgSrc = ...
    java.clickedOnImage(imgSrc);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2012-05-08
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多