如何在Nashorn脚本中重写自定义类toString方法填充JavaFX ComboBox
在Nashorn中重写自定义类的toString方法适配JavaFX ComboBox
在Nashorn脚本里创建能被JavaFX ComboBox正确识别的自定义类,核心就是让你的CategoryItem类重写Java的toString()方法——毕竟ComboBox就是靠这个方法来渲染选项文本的。下面给你一个完整的实现示例:
// 用Java.extend创建继承自java.lang.Object的自定义类 var CategoryItem = Java.extend(java.lang.Object, { // 类的构造函数,初始化分类的id和名称 __init__: function(categoryId, categoryName) { this.id = categoryId; this.name = categoryName; }, // 重写toString方法,返回ComboBox要显示的文本 toString: function() { // 这里可以根据需求自定义显示内容,比如只显示名称,或者id+名称 return this.name; // 如果需要显示id和名称的组合,改成下面这样: // return `${this.id} - ${this.name}`; } }); // 接下来把CategoryItem实例添加到ComboBox中 var categoryList = javafx.collections.FXCollections.observableArrayList(); categoryList.add(new CategoryItem(1, "电子产品")); categoryList.add(new CategoryItem(2, "家居用品")); categoryList.add(new CategoryItem(3, "服饰鞋帽")); // 绑定到你的cmbCategories控件 cmbCategories.setItems(categoryList);
关键说明:
- 必须用
Java.extend(java.lang.Object)来创建类:这样你的CategoryItem才是真正兼容Java的对象,JavaFX的ComboBox才能正确调用它的toString()方法。普通的JS对象虽然也能添加,但默认的toString输出是[object Object],没法满足显示需求。 __init__是Nashorn里的构造函数写法:用来初始化类的属性,比如这里的分类id和名称。- 自定义
toString()的返回值:完全根据你的业务需求来,想显示什么就返回什么,ComboBox会直接用这个值渲染选项文本。
这样操作后,你的cmbCategories就能正确显示每个分类的名称(或你自定义的文本)啦!
内容的提问来源于stack exchange,提问作者user3770144
相关产品推荐
相关产品推荐

