【发布时间】:2015-08-13 11:42:03
【问题描述】:
我有一个填充了可观察列表的列表视图
availableSymbolsTable.setItems(watch.GetAvailableSymbols());
细胞工厂:
availableSymbolsTable.setCellFactory(new Callback<ListView<Symbol>, ListCell<Symbol>>()
{
@Override
public ListCell<Symbol> call(ListView<Symbol> p)
{
final ListCell<Symbol> cell = new ListCell<Symbol>()
{
@Override
protected void updateItem(Symbol t, boolean bln)
{
if (t != null)
{
setText(t.getSymbolName());
}
setOnMouseEntered(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
//This works
System.out.println("index: " + getIndex());
}
});
setOnMouseClicked(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
//HERE getItem() always returns null
System.out.println( getItem().getSymbolName());
}
});
}
};
return cell;}});}
在 MouseClicked 事件处理程序中,getItem() 方法始终返回 null。如何获取关联的 Symbol 对象?
编辑: 如果有帮助:我不知道预期的行为,但是单击时,元素不会被选中。当我注释掉 mouseClicked 和 mouseEntered 处理程序时,会发生这种情况。鼠标点击什么都不做。
【问题讨论】:
-
请教育我 - 为什么不赞成?
-
选择问题是因为您忘记拨打
super.updateItem(t, bln);。这必须是您的updateItem(...)方法的第一行。 -
@James_D 这解决了选择和我原来的问题。您应该将其发布为答案。谢谢。
-
@UlukBiy 是正确的:您不应该重复更新
updateItem(...)方法中的处理程序。 -
@James_D 我也考虑了他的回答。结合您的两个答案,列表视图的行为符合我的预期 - 在点击事件中更改选择和获取项目。