G /设置FXML

时间:2016-09-23 14:47:22

标签: javascript javafx fxml

如何以编程方式获取和设置FXML中定义的Button的onAction处理程序?

我有FXML定义了几个按钮和一个标签

<?xml version="1.0" encoding="UTF-8"?>

<?language javascript?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javascriptfxmlapplication.FXMLDocumentController">
    <children>
        <Button fx:id="javaButton" layoutX="116.0" layoutY="50.0" mnemonicParsing="false" onAction="#handleButtonAction" text="Java Button" />
        <Button fx:id="javaScriptButton" layoutX="97.0" layoutY="90.0" onAction="label.setText('hi');" text="JavaScript Button" />
        <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="100" />
    </children>
</AnchorPane>

其中一个按钮具有在Java控制器中为此FXML文档定义的Java处理程序,另一个按钮具有定义为JavaScript代码段的内联处理程序。

Java文档处理程序如下:

package javascriptfxmlapplication;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;
    @FXML
    private Button javaScriptButton, javaButton;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        label.setText("Hello World!");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }

}

一切运作良好。但是可以动态获取/设置按钮执行的JavaScript吗?

据我所知,FXML加载器为FXML中定义的按钮创建了一个javafx.fxml.FXMLLoader $ ScriptEventHandler,以便拥有JavaScript处理程序,但是ScriptEventHandler是私有的,没有明显的方式以编程方式获取或设置JavaScript文本

我的目标是创建一个扩展Button的JavaScriptButton。它具有拖放事件处理程序,您可以在按钮上删除一些文本(JavaScript),并在按下按钮时执行JavaScript。我通过显式创建JavaScriptEngine并向我的JavaScriptButton添加Script属性来实现。这似乎很遗憾,因为大部分工作必须已经在核心JavaFX中完成。

0 个答案:

没有答案