我有一个带有ListView的JavaFX应用程序:
...
ArrayList<String> arrList = new ArrayList<>();
String[] fruitArr = {"apple", "orange", "banana", "peach", "grapes", "watermelon", "kiwi"};
arrList.addAll(Arrays.asList(fruitArr));
ObservableList<String> obList = FXCollections.observableArrayList(arrList);
myListView.setItems(obList);
myListView
.getSelectionModel()
.selectedIndexProperty()
.addListener(
(obs, oldVal, newVal) -> displaySelection(newVal));
...
...later...
private void displaySelection(Number newVal) {
textA.setText("Your Selection Is: "+arrList.get((int) newVal));
}
我还有一个代表用户随机选择项目的按钮:
btnPickSomething.setOnAction(event -> {
Random rand = new Random();
String randomlyPicked = arrList.get(rand.nextInt(arrList.size()));
textA.setText("Your Selection Is: "+randomlyPicked);
});
这是相当简单的JavaFX 101类型的东西。这是我无法弄清楚的:假设我在ListView中单击“orange”然后变得优柔寡断,并希望按钮为我做出决定。我点击按钮,随机选择“香蕉”。该应用程序如下所示:
textA字段显示按钮的随机选择字符串...但ListView仍然显示选中“橙色”。当然,这就是代码应该做的...但我想要一个解决方案,其中ListView选项与按钮选择的匹配。正确的观点应该是这样的:
这是一个微妙的事情,但对于超出本文范围的原因很重要。但必须有一种方法来编码按钮,以与用户相同的方式使用(覆盖?)ListView,即,当您单击按钮时,随机选择的项目在ListView中突出显示。如何重新编码按钮才能执行此操作?
非常感谢
答案 0 :(得分:3)
您使用selectionModel
ListView
来操纵选择。这可以通过传递项目或它的索引来完成:
Random rand = new Random();
int index = rand.nextInt(arrList.size());
myListView.getSelectionModel().select(index);
您也可以用
替换最后一行String item = myListView.getItems().get(index);
myListView.getSelectionModel().select(item);
但在这种情况下,您始终选择重复的ListView
项中的第一项。