这是我的问题看
public class TempStore { // this is a singleton class
public static ObservableList<Filez> files= FXCollections.observableArrayList();
}
现在在我班上
ListView<Filez> listfiles = new ListView<>();
listfiles.setItems(TempStore.files);
listfiles.setOrientation(Orientation.VERTICAL);
listfiles.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event arg0) {
// TODO Auto-generated method stub
System.out.println(listfiles.getSelectionModel().getSelectedIndex());
}
});
listfiles.setCellFactory((ListView<Filez> l) -> listup);
编辑 - 我的liscell课程
public class Listupdater extends ListCell<Filez> {
@Override
protected void updateItem(Filez arg0, boolean arg1) {
// TODO Auto-generated method stub
super.updateItem(arg0, arg1);
if(arg0 != null)
setGraphic(view(arg0));
}
@Override
public void updateIndex(int arg0) {
// TODO Auto-generated method stub
super.updateIndex(arg0);
setGraphic(view(TempStore.files.get(arg0)));
}
@Override
public void updateSelected(boolean arg0) {
// TODO Auto-generated method stub
super.updateSelected(arg0);
System.out.println("update selected");
}
@Override
public void startEdit() {
// TODO Auto-generated method stub
super.startEdit();
}
Node view(Filez arg0){
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(2, 2, 2, 2));
try {
System.out.print(arg0.toString());
} catch (Exception e) {
e.printStackTrace();
System.out.print("error caught");
}
Label lab = new Label(arg0.getName());
grid.add(lab, 1, 1);
return grid;
}
}
现在我的问题是我的列表视图中没有显示任何内容,当我点击列表视图区域时,system.out.printIn打印-1 ..并且我的列表不为空,总是有项目。我做错了什么可以帮助我...
还要添加更多信息,我的listview被放入tabpane的其中一个标签中。 如果有人也可以向我解释如何查看列表视图我也会得到满足,我想要的是能够以编程方式将/ del项目放在listiview中,并使用nodes..thanks <在listview中设置单元格样式/ p>
答案 0 :(得分:0)
首先,对于未显示单元格的问题,看起来您为每次调用工厂返回了ListCell
实现的相同实例。您应该每次都返回一个新实例:
listfiles.setCellFactory(l -> new Listupdater());
要对鼠标单击列表单元格做出反应,我会将鼠标监听器注册到单个单元格,而不是ListView
。这样你就可以访问该项,而不必检查选择(这有点像黑客:你没有真正保证在调用监听器之前设置选择)。
所以:
public class Listupdater extends ListCell<Filez> {
public Listupdater() {
setOnMouseClicked(event ->
if (! isEmpty() ) {
Filez f = getItem();
System.out.println("Click on " + f);
}
);
}
// ... your methods here
}
顺便说一句,您不需要实现updateIndex()
和updateItem()
,只需updateItem()
即可。其余的方法(updateSelected()
和startEdit()
)似乎是多余的,因为它们只是调用超类实现。它们不应该破坏任何东西,但它们只是冗余的代码。