gpt4 book ai didi

java - 使用单元工厂时 ComboBox.setValue(T) 不调用 updateItem(T,boolean)

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:49 25 4
gpt4 key购买 nike

我已经重写了 ListCell.updateItem(T, boolean) 来为我的 ComboBox 项目提供自定义渲染器(根据 Oracle ComboBox tutorial ),并且这工作正常,除非我使用 ComboBox.setValue(T) 以编程方式设置项目。

而是调用 T 的 toString() 方法。正在设置的项目已经在支持 ComboBox 的 ObservableList 中。

comboBox.setCellFactory(new Callback<ListView<MyType>, ListCell<MyType>>()
{
@Override
public ListCell<MyType> call(ListView<MyType> arg0)
{
return new ListCell<MyType>()
{
@Override
protected void updateItem(MyType item, boolean empty)
{
super.updateItem(item, empty);

if (item == null || empty)
{
setText("");
}
else
{
setText(item.myCustomRenderMethod());
}
}
};
}
});

我需要重写其他方法吗?

JDK1.7.0_45 上的 JavaFX2。

谢谢。

最佳答案

好的,在这里找到答案:JavaFx Editable ComboBox : Showing toString on item selection

您还需要重写 ComboBox.setConverter() 以确保所选对象显示正确的文本。这不在 Oracle 教程中,并且违反了最不意外的原则,因为它重复了 ListCell.updateItem() 中的一些代码

 comboBox.setConverter(new StringConverter<MyType>() {
@Override
public String toString(MyType obj) {
if (obj == null)
{
return "";
}
else
{
return obj.myCustomRenderMethod();
}
}

@Override
public MyType fromString(String s)
{

return null;
}
});

关于java - 使用单元工厂时 ComboBox.setValue(T) 不调用 updateItem(T,boolean),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com