JOptionPane下拉菜单无选项显示问题求助
JOptionPane下拉菜单无选项显示问题求助
嘿,我来帮你排查这个问题~看你的描述,下拉菜单能显示但点不开选项,大概率是你没给下拉菜单传入实际的选项数据源!
你现在的代码只是把匹配到的狗狗信息拼到了StringBuilder里用来展示文本,但JOptionPane的下拉菜单(比如showInputDialog的下拉模式)需要明确传入一个选项数组/集合,不然它就没东西可显示啦。
给你改改代码,核心是新增一个列表来存下拉选项,然后把它传给JOptionPane:
List<Dog> potentialMatches = allDogs.findMatch(dogCriteria); if (!potentialMatches.isEmpty()) { Map<String, Dog> options = new HashMap<>(); StringBuilder infoToShow = new StringBuilder("Matches Found! The following dogs meet your criteria: \n"); // 新增:专门存下拉菜单要显示的选项文本 List<String> dropdownOptions = new ArrayList<>(); for(Dog potentialMatch : potentialMatches){ // 把狗狗的名称和芯片号拼成统一的显示文本 String dogDisplayText = potentialMatch.getName() + " (" + potentialMatch.getMCNo() + ")"; infoToShow.append(dogDisplayText).append("\n"); // 把显示文本加入下拉选项列表,同时关联到对应的Dog对象 dropdownOptions.add(dogDisplayText); options.put(dogDisplayText, potentialMatch); } // 先弹出匹配结果的提示框 JOptionPane.showMessageDialog(null, infoToShow.toString()); // 弹出带下拉选项的选择框,这里传入我们准备好的选项数组 String selectedDogText = (String) JOptionPane.showInputDialog( null, "请选择一只狗狗:", "选择匹配的狗狗", JOptionPane.QUESTION_MESSAGE, null, dropdownOptions.toArray(new String[0]), // 关键:这里给下拉菜单传选项 dropdownOptions.get(0) // 默认选中第一个选项 ); // 用户选择后,从Map里取出对应的Dog对象做后续处理 if(selectedDogText != null){ Dog selectedDog = options.get(selectedDogText); // 这里可以加你需要的逻辑,比如打印选中狗狗的详情之类的 } } else { JOptionPane.showMessageDialog(null, "没有找到符合条件的狗狗哦~"); }
几个关键点给你划重点:
- 一定要给JOptionPane的下拉模式传入选项数组,不然下拉框就是空的
- 用
Map<String, Dog>把显示文本和实际的Dog对象绑定,这样用户选完能直接拿到对应的狗对象,不用再遍历查找 - 选项文本最好和你展示的匹配文本一致,这样用户看着也对应得上
试试看这个修改,应该就能看到下拉选项啦!
备注:内容来源于stack exchange,提问作者Paddy Bear
相关产品推荐
相关产品推荐

