JavaFX ListView显示对象地址而非菜单项名称的问题求助
问题核心是ListView默认调用元素的toString()方法展示内容,而MenuItem的默认toString()返回类名+哈希码,导致显示异常。以下两种方法可解决:
方法一:重写MenuItem类的toString()方法
直接在MenuItem类中重写toString(),返回菜单项名称:
public class MenuItem { // 原有属性和方法... @Override public String toString() { return getName(); // 调用已有的getName()方法返回名称 } }
修改后,ListView会自动调用这个方法显示名称,无需改动OrderWindow中的代码。
方法二:给ListView设置自定义CellFactory
如果不想修改MenuItem类的全局行为,可在OrderWindow中为ListView定制单元格显示逻辑:
在OrderWindow的构造方法或show()方法中添加以下代码:
orderList.setCellFactory(listView -> new ListCell<MenuItem>() { @Override protected void updateItem(MenuItem item, boolean empty) { super.updateItem(item, empty); // 空单元格或无数据时清空文本 if (empty || item == null) { setText(null); } else { // 设置为菜单项名称 setText(item.getName()); } } });
推荐将这段代码放在初始化orderList之后,比如构造方法中gridpane.add(orderList, 1, 0);之后。
两种方法任选其一即可解决问题,方法一简单直接,方法二更灵活,适合局部定制显示逻辑的场景。
内容的提问来源于stack exchange,提问作者jjDestroyer4
相关产品推荐
相关产品推荐

