通过javascript类填充JavaFX组合框(Nashorn)

时间:2018-03-26 09:07:16

标签: javafx combobox nashorn

我尝试使用我在脚本中创建的自定义类(脚本是用Nashorn编写的),之后我尝试使用这个自定义类来填充组合框中的项目。我知道如果我想在组合框中看到正确的值,那么类必须覆盖方法toString,但在这种情况下,我不知道如何在我用Nahorn编写的自定义类中覆盖此方法。 下面我提供我的代码,其中变量cmbCategories是JavaFX组合框和CategoryItem,我尝试将其用作对象来填充组合框中的项目并显示为类别名称。 我很感激任何建议或想法如何解决这个问题。

var ClientBuilder = Java.type("javax.ws.rs.client.ClientBuilder")
var Platform = Java.type("javafx.application.Platform")
var Executors = Java.type("java.util.concurrent.Executors")
var Response = Java.type("javax.ws.rs.core.Response")
var String = Java.type("java.lang.String")
var List = Java.type("java.util.ArrayList")

Executors.newSingleThreadExecutor().execute(function () {
    print("Calling for category data...")
    var categoryData = ClientBuilder
        .newClient()
        .target(String.format("%s%s", "http://localhost:8080", "/client/action/categories"))
        .request()
        .get()

    if(categoryData.getStatus() == Response.Status.OK.getStatusCode()) {
        var categories = JSON.parse(categoryData.readEntity(String.class))
        var categoryItems = new List();

        for each (var category in categories) {
            categoryItems.add(new CategoryItem(category.id, category.category))
        }
         Platform.runLater(function() {
           cmbCategory.getItems().addAll(categoryItems);        
         }); 
    } else {
        print(categoryData.getEntity().toString());
    }
})



function CategoryItem(id, name) {
    this.id = id;
    this.name = name;

    this.toString = function () {
        return this.name;
    }
}

1 个答案:

答案 0 :(得分:0)

使用ScriptEnginecellValueFactory的{​​{1}}中检索相应的字符串。

简化示例

ComboBox

虽然我没有看到使用JavaScript的目的。你在javascript代码中所做的一切都可以更有效地从java代码中完成......