是否可以将类导入FXML <fx:script>块(JavaFX-2)

javafx-2 fxml

1175 观看

2回复

6585 作者的声誉

我正在尝试使用JavaFX-2,其中一个功能据说是我们可以在FXML文件中使用Javascript创建事件处理函数。让我烦恼的一件事是我无法立即访问System类。它需要完全引用,如“java.lang.System”。当我们在控制台上需要一个简单的输出时,这变得很难看,我的意思是,“System.out.println”很难看到打印出来的东西。而且,即使我的FXML具有所有<?import java.lang。*?>语句,显然它也不会影响标记内部。

示例代码:(注意<?language javascript?>指令)

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

<?language javascript?>

<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>

<AnchorPane fx:id="rootPane">
  <fx:script>
    function buttonAction(event){
      java.lang.System.out.println("finally we get to print something.");
      // System.out.println("This wouldn't work even if it wasn't a comment line, anyway");
    }
  </fx:script>
  <children>
    <Button id="close" mnemonicParsing="false" onAction="buttonAction(event)" text="">
      <graphic>
        <ImageView pickOnBounds="true">
          <image>
            <Image url="@../resources/close.png" preserveRatio="true" smooth="true" />
          </image>
        </ImageView>
      </graphic>
    </Button>
  </children>
</AnchorPane>

所以我的问题是:有没有办法将类导入?我记得我在Actionscript3.0中这样做很容易:import flash.events.MouseEvent...

作者: Abdullah Battal 的来源 发布者: 2012 年 11 月 28 日

回应 (2)


1

29574 作者的声誉

决定

使用javascript内置importPackageimportClass函数。

 <fx:script>
    importPackage(java.lang);
    function buttonAction(event){
        System.out.println("finally we get to print something.");
    }
</fx:script>

有关更多详细信息,请参阅:http//docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsimport

作者: Sergey Grinev 发布者: 28.11.2012 12:45

0

66 作者的声誉

这有点令人困惑,但来自Sergey的链接提供了背景中正在发生的事情的良好背景(即将Java扩展到脚本世界)。

尽管谢尔盖的解决方案有效,但它在内联脚本中混合了java类方法,这可能是javascript(根据页面语言声明)。没有浏览器,所以没有“console.log()”,所以也许最好避免潜在的java / js混淆并只使用print():

<fx:script>
    function reactToClick(event) {
        print("I was clicked");
    }
</fx:script>

接下来的问题是print()方法源于哪里......它不是java而且它不是js。我认为答案在于Nashorn javascript引擎用于支持java / js集成。Print()是一个内置函数:Nashorn shell命令。

作者: joedev 发布者: 09.06.2019 11:31
32x32