gpt4 book ai didi

java - ListView 为空时无法添加和编辑单元格

转载 作者:行者123 更新时间:2023-12-01 09:33:00 25 4
gpt4 key购买 nike

我正在尝试使用 ListView 作为来自自定义数据模型的字符串编辑器。我将 TextFieldListCell 与适当的 StringConverter 一起用于单元格。

ListView 旁边有一个添加按钮,可以在操作时调用此方法:

@FXML
private void addElement() {
WordListItem newItem = new WordListItem(-1, "");

wordListItems.add(newItem);
wordListView.setEditable(true);
wordListView.getSelectionModel().select(wordListItems.indexOf(newItem));
wordListView.edit(wordListItems.indexOf(newItem));
wordListView.setEditable(false);
}

其中,wordListViewListViewwordListItems 是包含 wordListView 数据的 ObservableList .

这确实有效,除非列表为空(非空),而且我无法完全解释原因,因此我检查了 Java 源代码以寻求帮助。

这是我到目前为止发现的内容:对 ListViewedit(int) 调用更改了 ListView 的内部 editIndex 值,该值应该调用 EDIT_START EventeditIndex 是一个 ReadOnlyIntegerWrapper,其中我发现了一些我不太理解的奇怪代码,我不确定这是否真的产生了错误,或者我只是可以'不明白他们为什么这样做:

@Override
protected void fireValueChangedEvent() {
super.fireValueChangedEvent();
if (readOnlyProperty != null) {
readOnlyProperty.fireValueChangedEvent();
}
}

只要 ListVieweditIndex 属性发生更改,就会调用此方法。问题:readOnlyProperty 为空,因为它没有在任何地方设置。我唯一能找到它被设置的地方是在 getter 中:

public ReadOnlyIntegerProperty getReadOnlyProperty() {
if (readOnlyProperty == null) {
readOnlyProperty = new ReadOnlyPropertyImpl();
}
return readOnlyProperty;
}

(ReadOnlyIntegerImpl 是一个内部私有(private)类,readOnlyProperty 是它的类型)

<小时/>

现在我的实际问题:这是一个错误还是我正在监督某些事情?是否有原因导致我无法在列表为空时添加和编辑新创建的元素,或者实际上只是尚未调用此 getter?

最佳答案

您找到的源代码只是延迟初始化属性的代码。

除非为属性分配新值或请求属性本身,否则可以使用 null 作为属性,以避免不必要的属性对象创建。这不是这里的问题。

问题似乎是在调用 edit 之前 ListView 单元格未更新。这种情况发生在布局期间,因此在开始编辑之前“手动”调用 layout 应该可以:

private void addElement() {
WordListItem newItem = new WordListItem(-1, "");

wordListItems.add(newItem);
wordListView.setEditable(true);

wordListView.layout();

wordListView.edit(wordListItems.size()-1);
wordListView.setEditable(false);
}

关于java - ListView 为空时无法添加和编辑单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39245172/

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