簡體   English   中英

如何從fxml中的JavaScript內部為javaFX調用java方法

[英]How to call a java method from inside JavaScript inside fxml for javaFX

我試圖找到一種方法從sceneController外部和fxml內部調用sceneController中的方法,而不使用按鈕或必須要激活的東西。 我希望每次應用程序啟動時都運行一次。 所以目前,每次程序啟動時,它都會創建一個覆蓋整個屏幕的圖像視圖。 但是,程序打開的每個人都希望顯示文件夾中的隨機圖像。 現在,imageView有一個fx:id,我在場景控制器內部的方法中使用它來設置圖像。 場景控制器內部的方法完美運行。 然而問題是我想要在程序啟動時隨機生成圖像,而不是當你按下按鈕時(當前發生的事情)。 控制imageView的方法必須在場景控制器內部,並且不能從場景控制器外部調用,因為它沒有構造函數(試圖創建一個並導致問題)。 你可以從fxml內部調用方法(什么按鈕和什么不做)我試圖調用方法從fxml文件中使用JavaScript設置圖像,因為你似乎可以這樣做。 我只是想知道是否有人知道這個問題的更好的解決方案。 或者更好的是知道如何從fxml文件中的JavaScript內部調用java方法。

所以我使用JavaFX來構建我正在嘗試構建的程序的GUI,並且有點像菜鳥。 現在,在我開始構建程序的業務結束之前,我正試圖獲得一個漂亮的工作GUI。 我使用的是eclipse 4.6和Java 8。

<VBox xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.initSceneController" >

        <fx:script>
            var executeOnce = false;

            if(executeOnce === false) {
                #setBackground;
                executeOnce = true;
            }

            else {
            }


        </fx:script>

所以我希望fxml文件中的這段代碼實際上會調用一個名為setBackground的sceneHandeler中的方法,但它只是給我錯誤:

<eval>:5:5 Expected an operand but found error
                #setBackground;
                ^ in <eval> at line number 5 at column number 5

它並不完全是你要求的,但可能你應該在控制器中聲明一個initialize()方法。 如果存在這樣的方法, FXMLLoader將在控制器的初始化時執行它。 這樣,您就不需要任何JavaScript。

public void initialize() {
    // choose your random image here
    // imageView.setImage(...);
}

如果要保持方法私有/受保護,則必須使用@FXML對其進行注釋。

另請參閱“ FXML簡介”中的“ 控制器”部分。

注意:使用構造函數而不是initialize()時的問題可能是,在構造時,字段(fi your ImageView)尚未初始化/注入(意味着它們為null ),因此您無法使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM