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
,则JavaFX
ListView
的默认选择模型似乎会向
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");