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

通过JList获取枚举成本并计算滑板部件总费用

没问题,我来帮你搞定这个滑板部件成本计算的需求!下面是具体的实现方案,完全贴合你的代码结构:

滑板部件选中项成本求和实现方案

核心思路

我们需要通过计算按钮的事件监听器,逐个获取四个JList的选中枚举项,调用枚举类的getCost()方法提取成本,最后累加得到总成本。

具体实现步骤

1. 确保JList正确绑定枚举数据源

首先要确认你的每个JList都已经加载了对应枚举的所有实例,比如Decks枚举的初始化代码可以这样写:

// 初始化滑板板面的JList
JList<SkateBoardParts.Decks> deckList = new JList<>(SkateBoardParts.Decks.values());
// 同理初始化其他三类部件的JList
JList<SkateBoardParts.Trucks> trucksList = new JList<>(SkateBoardParts.Trucks.values());
JList<SkateBoardParts.Wheels> wheelsList = new JList<>(SkateBoardParts.Wheels.values());
JList<SkateBoardParts.Miscellaneous> miscList = new JList<>(SkateBoardParts.Miscellaneous.values());

2. 给计算按钮绑定事件监听器

在监听器的actionPerformed方法里实现求和逻辑,记得处理未选中项的空值情况:

calculateButton.addActionListener(e -> {
    double totalCost = 0.0;

    // 处理板面选中项
    SkateBoardParts.Decks selectedDeck = deckList.getSelectedValue();
    if (selectedDeck != null) {
        totalCost += selectedDeck.getCost();
    }

    // 处理桥(trucks)选中项
    SkateBoardParts.Trucks selectedTruck = trucksList.getSelectedValue();
    if (selectedTruck != null) {
        totalCost += selectedTruck.getCost();
    }

    // 处理轮子选中项
    SkateBoardParts.Wheels selectedWheel = wheelsList.getSelectedValue();
    if (selectedWheel != null) {
        totalCost += selectedWheel.getCost();
    }

    // 处理杂项选中项
    SkateBoardParts.Miscellaneous selectedMisc = miscList.getSelectedValue();
    if (selectedMisc != null) {
        totalCost += selectedMisc.getCost();
    }

    // 展示计算结果,这里用弹窗示例,你也可以替换成文本框显示
    JOptionPane.showMessageDialog(null, "选中部件总成本:$" + String.format("%.2f", totalCost));
});

3. 可选:支持JList多选场景

如果你的JList设置为允许多选(比如deckList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)),可以用下面的方式遍历所有选中项:

// 以板面为例处理多选
List<SkateBoardParts.Decks> selectedDecks = deckList.getSelectedValuesList();
for (SkateBoardParts.Decks deck : selectedDecks) {
    totalCost += deck.getCost();
}
// 其他三类部件的JList同理处理

关键注意点

  • 确保每个枚举类都正确实现了getCost()方法,比如Decks枚举的完整写法应该是:
public enum Decks {
    FIRST_DECK(10.0), PRO_DECK(25.99), BEGINNER_DECK(12.5); // 示例枚举项

    private final double cost;

    Decks(double c) {
        this.cost = c;
    }

    public double getCost() {
        return cost;
    }
}
  • 必须做空值判断:如果用户没有选中某类部件,getSelectedValue()会返回null,直接调用getCost()会触发空指针异常,所以一定要加if (selectedItem != null)的判断。

内容的提问来源于stack exchange,提问作者gatorade2131

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:33:45