如何在for循环中使用getSelectedIndices?ObservableList适配问题求助
解决JavaFX中ObservableList索引访问的问题
嘿,这个问题我在JavaFX开发中也碰到过!别担心,ObservableList作为JavaFX专门设计的集合类,有自己的遍历和索引访问方式,咱们直接修改代码就能搞定:
方法1:用增强for循环(最简洁)
ObservableList支持直接遍历元素,完全不需要手动处理索引,代码会更简洁易读:
public void calculateTotal(){ int wheelIndex = wheels.getSelectionModel().getSelectedIndex(); int deckIndex = decks.getSelectionModel().getSelectedIndex(); int truckIndex = trucks.getSelectionModel().getSelectedIndex(); // 改为ObservableList<Integer>接收选中的索引 ObservableList<Integer> miscSelectedIndices = misc.getSelectionModel().getSelectedIndices(); int miscTotal = 0; // 直接遍历每个选中的索引值 for(int selectedIndex : miscSelectedIndices) { miscTotal += miscPrices[selectedIndex]; } }
方法2:保留传统for循环(需要索引场景)
如果你还是习惯用传统for循环的写法,可以用ObservableList的两个方法替代数组的特性:
- 用
size()代替数组的length获取元素总数 - 用
get(int index)代替数组[index]获取指定位置的元素
修改后的代码如下:
public void calculateTotal(){ int wheelIndex = wheels.getSelectionModel().getSelectedIndex(); int deckIndex = decks.getSelectionModel().getSelectedIndex(); int truckIndex = trucks.getSelectionModel().getSelectedIndex(); ObservableList<Integer> miscSelectedIndices = misc.getSelectionModel().getSelectedIndices(); int miscTotal = 0; // 用size()获取集合长度,get(i)获取对应索引的元素 for(int i = 0; i < miscSelectedIndices.size(); i++){ miscTotal += miscPrices[miscSelectedIndices.get(i)]; } }
补充说明
JavaFX推荐用ObservableList替代数组返回选中索引,是因为它支持集合变化监听,能自动响应UI选择状态的变更,更适合JavaFX的响应式开发模式。旧版本的getSelectedIndices()返回数组的写法现在大多已经被标记为过时了,所以调整成ObservableList的写法是更规范的选择。
内容的提问来源于stack exchange,提问作者dydx
相关产品推荐
相关产品推荐

