在JavaFX2中的loadContent之后,“提交”按钮单击不起作用

时间:2013-11-26 23:44:30

标签: javafx-2

我正在通过javafx web engine.load(url)加载网址。我的要求是在页面加载时修改嵌入式HTML,以通过更改字体的来源正确加载字体。我能够获取文档对象并转换为字符串并替换相应的部分,然后使用 webengine.loadContent(string)加载HTML。但是,一旦页面出现并单击提交按钮,就不会发生任何事情。下面是我的代码,所有这些都发生在:

  webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
        String htmlBody = null;
        @Override
        public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State prevState, Worker.State newState) {
            //To change body of implemented methods use File | Settings | File Templates.
            //String htmlBody = null;
            int count = 0;
            if (newState == Worker.State.SUCCEEDED) {
                browser.requestFocus();
                // Get the document object from Engine.
                Document doc = webEngine.getDocument();
                try {
                    // Use Transformer to convert the HTML Object from the document top String format.
                    Transformer transformer = TransformerFactory.newInstance().newTransformer();
                    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
                    transformer.setOutputProperty(OutputKeys.METHOD, "html");
                    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

                    StringWriter outWriter = new StringWriter();
                    transformer.transform(new DOMSource(doc),new StreamResult(outWriter));
                    StringBuffer sb = outWriter.getBuffer();
                    htmlBody = sb.toString();

                    // Replace the font-family attribute in the style section to the actual URL of the font being used.
                    htmlBody = htmlBody.replace("font-family: medium", "font-family: url(http://1.10.30.45:8080/fonts/Md.ttf)");
                     observableValue.removeListener(this); 

                    // Load the new HTML string to the Engine.
                    webEngine.loadContent(htmlBody, "text/html");


                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    });
    webEngine.load(url);
    //add the web view to the scene
    getChildren().add(browser);

如果我删除以下2行,我可以点击登录按钮并转到欢迎页面。                         observableValue.removeListener(本);

                    // Load the new HTML string to the Engine.
                    webEngine.loadContent(htmlBody, "text/html");

但在这种情况下,实际字体会更改为某些默认字体。

2 个答案:

答案 0 :(得分:0)

按下提交按钮时运行的HTML / Javascript代码是什么?相关表单的action属性是什么?我怀疑由于webEngine.loadContent()调用,页面不知道提交表单的 where ,这就是它无效的原因。

有可能通过正常加载页面并使用userStyleSheetLocation的{​​{1}}属性手动设置样式表(ref)来解决您的样式问题。我建议您使用WebEngine进行一些实验。

答案 1 :(得分:0)

自定义字体加载问题通过jdk 8与最新版本的javafx解决。 jdk 1.8.0中的版本为 javafx.runtime.version = 8.0.0

早期JDK 1.7.0_45是 javafx.runtime.version = 2.2.45

感谢。