Java求助:如何用if语句根据选中星期填充对应任务列表?
问题分析与解决方案
原代码的核心问题
- 判断条件错误:你用
days.equals("Monday")做判断,但days是整个星期列表的List对象,永远不可能等于字符串"Monday",应该获取下拉框选中的具体日期字符串。 - 多余循环:遍历整个星期列表(7次)完全没必要,选中一个日期只需要处理一次对应任务即可,循环会导致重复添加7次内容。
优化实现方式
推荐用Map<String, List<String>>存储每天对应的家务任务,代码更简洁易维护,避免大量if-else分支。
修正后的完整代码
import javax.swing.*; import java.util.List; import java.util.Map; import java.awt.BorderLayout; public class DayChooser{ void buildGui(){ JFrame frame = new JFrame("Daily Chore Chart"); // 定义星期列表 List<String> days = List.of("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ); JComboBox<String> box = new JComboBox<>(days.toArray(new String[0])); JList<String> chores = new JList<>(new DefaultListModel<>()); // 用Map存储每天的家务任务 Map<String, List<String>> choreMap = Map.of( "Monday", List.of("1. Clean the Bathroom", "2. Do the Laundry", "Do it"), "Friday", List.of("1. Take out Trash", "2. Vacuum the Floor"), "Saturday", List.of("1. Deep Clean Kitchen", "2. Water Plants") // 可继续添加其他日期的任务,未定义的日期默认显示无家务 ); box.addActionListener( evt->{ DefaultListModel<String> model = (DefaultListModel<String>)chores.getModel(); model.clear(); // 获取选中的日期 String selectedDay = (String) box.getSelectedItem(); model.addElement(selectedDay + " Chores"); // 根据选中日期获取对应任务,无匹配则显示无家务 List<String> dailyChores = choreMap.getOrDefault(selectedDay, List.of("No Chores!")); dailyChores.forEach(model::addElement); }); // 初始化默认显示内容 DefaultListModel<String> model = (DefaultListModel<String>)chores.getModel(); model.addElement("Daily Chores"); model.addElement("1. Make the Bed"); model.addElement("2. Clean the Litterbox"); model.addElement("3. Wash the Dishes"); model.addElement("4. Wipe down the Counters"); frame.add(box, BorderLayout.NORTH); frame.add(chores, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); frame.setSize(400,400); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } public static void main(String[] args){ DayChooser dc = new DayChooser(); SwingUtilities.invokeLater( dc::buildGui ); } }
关键改进点
- 用
Map存储日期与任务的对应关系,后续修改或添加任务只需调整Map,无需改动逻辑代码 - 正确获取下拉框选中的日期字符串
(String) box.getSelectedItem() - 用
getOrDefault简化逻辑:选中日期有对应任务则添加,否则添加"No Chores!" - 移除多余循环,避免重复输出内容
内容的提问来源于stack exchange,提问作者abbey
相关产品推荐
相关产品推荐

