JavaFX ListView ListChangeListener.SelectionMode.MULTIPLE的更改错误
如果选择模式为JavaFX ListView ListChangeListener.SelectionMode.MULTIPLE的更改错误,listview,view,javafx,selection,multipleselection,Listview,View,Javafx,Selection,Multipleselection,如果选择模式为SelectionMode.MULTIPLE,则JavaFXListView的默认选择模型似乎会向Change对象中的侦听器报告错误的值。我对Change的解释是否不正确 我有一个包含“Julia”、“Ian”、“Sue”等项的列表视图。下面的代码生成以下输出: 单击第一项“Julia”(“Julia”被选中,输出正确): Shift+向下箭头(“Julia”和“Ian”被选中): 从0到1,删除0,添加1这看起来像是一个bug,可能在列表视图的行为类中。您应该在以下位置提交错误报
SelectionMode.MULTIPLE
,则JavaFXListView
的默认选择模型似乎会向Change
对象中的侦听器报告错误的值。我对Change
的解释是否不正确
我有一个包含“Julia”、“Ian”、“Sue”等项的列表视图。下面的代码生成以下输出:
单击第一项“Julia”(“Julia”被选中,输出正确):
Shift+向下箭头(“Julia”和“Ian”被选中):
从0到1,删除0,添加1这看起来像是一个bug,可能在列表视图的行为类中。您应该在以下位置提交错误报告:
注意
ObservableList<String> names = FXCollections.observableArrayList();
names.addListener((ListChangeListener.Change<? extends String> c) -> {
while (c.next()) {
System.out.printf("from %d, to %d, removed %d, added %d\n",
c.getFrom(), c.getTo(), c.getRemovedSize(), c.getAddedSize());
if (c.wasAdded()) System.out.println("was added");
if (c.wasRemoved()) System.out.println("was removed");
if (c.wasPermutated()) System.out.println("was permutated");
if (c.wasUpdated()) System.out.println("was updated");
if (c.wasReplaced()) System.out.println("was replaced");
System.out.println("removed:");
for (String e : c.getRemoved()) {
System.out.println(" " + e);
}
System.out.println("added:");
for (String e : c.getAddedSubList()) {
System.out.println(" " + e);
}
System.out.println("selected:");
for (String e : names) {
System.out.println(" " + e);
}
System.out.println();
}
});
names.add("Julia");
names.add("Ian");
names.add("Sue");
observeList name=FXCollections.observearraylist();
names.addListener((ListChangeListener.change)我刚刚提交了一份错误报告。感谢您的链接。
from 0, to 1, removed 0, added 1 <-- should be from 1, to 2
was added
removed:
added:
Julia <-- should be Ian
selected:
Julia
Ian
from 0, to 1, removed 0, added 1 <-- should be from 2, to 3
was added
removed:
added:
Julia <-- should be Sue
selected:
Julia
Ian
Sue
public void start(Stage stage) {
ObservableList<String> items = FXCollections.observableArrayList(
"Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise");
ListView<String> listView = new ListView<>(items);
MultipleSelectionModel<String> selectionModel = listView.getSelectionModel();
selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
ObservableList<String> selectedItems = selectionModel.getSelectedItems();
selectedItems.addListener((ListChangeListener.Change<? extends String> c) -> {
while (c.next()) {
System.out.printf("from %d, to %d, removed %d, added %d\n",
c.getFrom(), c.getTo(), c.getRemovedSize(), c.getAddedSize());
if (c.wasAdded()) System.out.println("was added");
if (c.wasRemoved()) System.out.println("was removed");
if (c.wasPermutated()) System.out.println("was permutated");
if (c.wasUpdated()) System.out.println("was updated");
if (c.wasReplaced()) System.out.println("was replaced");
System.out.println("removed:");
for (String e : c.getRemoved()) {
System.out.println(" " + e);
}
System.out.println("added:");
for (String e : c.getAddedSubList()) {
System.out.println(" " + e);
}
System.out.println("selected:");
for (String e : selectedItems) {
System.out.println(" " + e);
}
System.out.println();
}
});
Scene scene = new Scene(listView, 300, 300);
stage.setTitle("List View Sample");
stage.setScene(scene);
stage.show();
}
ObservableList<String> names = FXCollections.observableArrayList();
names.addListener((ListChangeListener.Change<? extends String> c) -> {
while (c.next()) {
System.out.printf("from %d, to %d, removed %d, added %d\n",
c.getFrom(), c.getTo(), c.getRemovedSize(), c.getAddedSize());
if (c.wasAdded()) System.out.println("was added");
if (c.wasRemoved()) System.out.println("was removed");
if (c.wasPermutated()) System.out.println("was permutated");
if (c.wasUpdated()) System.out.println("was updated");
if (c.wasReplaced()) System.out.println("was replaced");
System.out.println("removed:");
for (String e : c.getRemoved()) {
System.out.println(" " + e);
}
System.out.println("added:");
for (String e : c.getAddedSubList()) {
System.out.println(" " + e);
}
System.out.println("selected:");
for (String e : names) {
System.out.println(" " + e);
}
System.out.println();
}
});
names.add("Julia");
names.add("Ian");
names.add("Sue");