You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:18:16