如何用JOptionPane获取Yes/No响应并实现程序循环逻辑?
用JOptionPane实现Yes/No响应驱动的循环议价流程
嘿,我来帮你搞定这个需求!核心思路就是用循环结构结合JOptionPane的确认对话框,把「是否议价」作为循环的开关——用户选“是”就进入买卖流程,完成后再回到议价询问;选“否”就直接终止程序。
核心知识点:JOptionPane的确认对话框返回值
JOptionPane的showConfirmDialog()会返回整数常量,对应用户的选择:
JOptionPane.YES_OPTION:用户点击了「是」JOptionPane.NO_OPTION:用户点击了「否」JOptionPane.CLOSED_OPTION:用户关闭了对话框(没点按钮)
完整代码示例
下面是直接能用的代码,我加了详细注释,你可以直接替换掉买卖流程里的占位代码:
import javax.swing.JOptionPane; public class BargainTradeProgram { public static void main(String[] args) { int bargainDecision; // do-while循环:至少询问一次是否议价,直到用户选"否"或关闭对话框 do { // 弹出是否议价的Yes/No对话框 bargainDecision = JOptionPane.showConfirmDialog( null, // 父组件为null,对话框居中显示 "你想要进行议价吗?", // 提示消息 "议价确认", // 对话框标题 JOptionPane.YES_NO_OPTION, // 显示Yes/No按钮 JOptionPane.QUESTION_MESSAGE // 消息类型(问号图标) ); // 如果用户选择"是",进入买卖流程 if (bargainDecision == JOptionPane.YES_OPTION) { // 弹出购买/出售的选择对话框 int tradeType = JOptionPane.showOptionDialog( null, "请选择交易类型:", "交易选择", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, // 自定义图标,这里用默认 new String[]{"购买物品", "出售物品"}, // 自定义选项文本 "购买物品" // 默认选中的选项 ); // 根据用户选择执行对应逻辑 switch (tradeType) { case 0: // 用户选了"购买物品" JOptionPane.showMessageDialog(null, "正在处理购买流程:\n1. 挑选物品\n2. 议价\n3. 完成支付"); // 在这里插入你的购买流程代码 break; case 1: // 用户选了"出售物品" JOptionPane.showMessageDialog(null, "正在处理出售流程:\n1. 上架物品\n2. 议价\n3. 完成交易"); // 在这里插入你的出售流程代码 break; default: // 用户关闭了交易选择对话框 JOptionPane.showMessageDialog(null, "未选择交易类型,回到议价询问"); } } // 处理用户关闭议价对话框的情况(直接终止循环) else if (bargainDecision == JOptionPane.CLOSED_OPTION) { JOptionPane.showMessageDialog(null, "你关闭了对话框,程序结束"); break; } // 只要用户选"是",就重复循环 } while (bargainDecision == JOptionPane.YES_OPTION); // 用户选"否"后,显示结束提示 if (bargainDecision == JOptionPane.NO_OPTION) { JOptionPane.showMessageDialog(null, "程序已结束,感谢使用!"); } } }
关键逻辑说明
- do-while循环:保证程序至少会问一次「是否议价」,避免用户直接进入结束状态。
- 分层对话框:先判断是否进入议价,再选择交易类型,逻辑清晰不混乱。
- 边界处理:考虑了用户关闭对话框的情况,避免程序陷入无意义的循环。
你可以根据自己的需求,把买卖流程里的提示消息替换成实际的业务代码,比如读取物品列表、计算价格之类的逻辑。
内容的提问来源于stack exchange,提问作者Victor Alam




