繁体   English   中英

当用户单击取消时,如何使用 JOptionPane 从子菜单返回主菜单?

[英]How do I go back to the main menu from a sub menu using JOptionPane when the user clicks cancel?

我正在制作一种方法,其中有多个选项,并且每个选项一旦被选中,就需要“取消”按钮返回主菜单。

主菜单:

 public static void start(){
   String[] choices = {"1. Routines for Triangles","2. Routines for Temperatures","3. Routines for Geometric Figures","4. String Manipulations",
                                            "5. Miscellaneous Simple Games.","6. Quit"};
   String menu = (String) JOptionPane.showInputDialog(null,"choose","Main menu",JOptionPane.QUESTION_MESSAGE,null,choices,choices[0])
       while (menu != null){
           switch (menu){
               case "1. Routines for Triangles":
                   triangleRoutines(); //one sub menu
                   break;
               case "2. Routines for Temperatures":
                   break;
               case "3. Routines for Geometric Figures":
                   break;
               case "4. String Manipulations":
                   break;
               case "5. Miscellaneous Simple Games.":
                   break;
               case "6. Quit":
                   break;

           }
       }

   }

一个子菜单:

private static void triangleRoutines(){

   String[] stringArray = {"Determine the Type of Triangle", "Determine a Valid Triangle", "Determine the Area of the Sides of a Triangle", "Determine a Pythagorean Triple",
                            };
       String reply = (String) JOptionPane.showInputDialog(null, "Choose what you want to do today", "Triangle Processes", JOptionPane.QUESTION_MESSAGE,
               null, stringArray, stringArray[0]);

           switch (reply){
               case "Determine the Type of Triangle":
                   break;
               case "Determine a Valid Triangle":
                   break;
               case "Determine the Area of the Sides of a Triangle":
                   break;
               case "Determine a Pythagorean Triple":
                   break;
           }
 }

JOptionPane.showInputDialog()对话框在没有进行选择的情况下被取消关闭时,则返回空值 您需要处理这个空值并相应地采取行动,但您需要决定在它发生时要做什么。 关闭应用程序,重新显示主菜单对话框并强制选择退出菜单选项等。

要始终保持主菜单可用,请将其放在while循环中,例如:

String[] choices = {"1. Routines for Triangles", "2. Routines for Temperatures", 
                    "3. Routines for Geometric Figures", "4. String Manipulations",
                    "5. Miscellaneous Simple Games.", "6. Quit"};

String menu = "";
while (!menu.equals("6. Quit")) {
    menu = (String) JOptionPane.showInputDialog(null, "<html>Choose A Menu Item:<br><br></html>", "Main Menu", 
                    JOptionPane.QUESTION_MESSAGE, null, choices, choices[0]);
    if (menu == null) {
        //continue; //uncomment and delete line below to force menu item 6 to be selected to quit Main Menu.
        break; //Quit the Main Menu
    }

    switch (menu) {
        case "1. Routines for Triangles":
            triangleRoutines();  //one sub menu
            break;
        case "2. Routines for Temperatures":
            break;
        case "3. Routines for Geometric Figures":
            break;
        case "4. String Manipulations":
            break;
        case "5. Miscellaneous Simple Games.":
            break;
        case "6. Quit":
            // This case is not really required unless you want to
            // do some cleanup of sorts before quiting. 
            break;
        }
    }

对包含子菜单的方法使用相同的技术,但添加一个菜单选项: Return To Main Menu ,也许还有一个附加选项:如果需要, Quit Application

最好的方法是实现Command设计模式

但是,如果关键是triangleRoutines需要返回到上一个菜单,那么考虑到当前的整体方法,我认为对菜单的显示位置进行修改是可行的。 我不肯定这是 OP 的问题,但我相信是这样。

有关其他详细信息,请参阅示例代码中的注释。

未测试,但类似于:

private static void triangleRoutines() {
  ...

  // if the program is done, can return null

  // if cancel, then return anything but null
  return "";
}

然后

do {
  // get the menu from the top level
  String menu = (String) JOptionPane.showInputDialog(null,"choose","Main menu",JOptionPane.QUESTION_MESSAGE,null,choices,choices[0])
   switch (menu){
       case "1. Routines for Triangles":
           // if cancel, then will return empty string, and then
           //  re-present the main menu 
           triangleRoutines(); //one sub menu
           break;

       ...

       case "6. Quit":
           menu = null;
           break;
   } //switch
} while (menu != null);

因此,在triangleRoutines()可以“取消”,它将返回一个不为空的空String ,因此它将再次显示顶级菜单。 如果要退出子菜单triangleRoutines()则返回null,程序将退出。

同样,我可能误解了具体问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM