Как вернуться в главное меню из подменю с помощью JOptionPane, когда пользователь нажимает кнопку отмены? - PullRequest
0 голосов
/ 20 октября 2018

Я делаю метод, в котором у него есть несколько вариантов, и каждый из этих вариантов, после выбора, должен иметь кнопку «Отмена», чтобы вернуться в главное меню.

Главное меню:

 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;
           }
 }

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Когда диалоговое окно JOptionPane.showInputDialog () имеет значение Отменено или Закрыто без выборазатем возвращается null .вам нужно справиться с этим нулем и действовать соответствующим образом, но вам нужно будет решить, что вы хотите сделать, когда это произойдет.Закройте приложение, снова откройте диалоговое окно «Главное меню» и принудительно выберите опцию «Выйти», и т. Д.

Чтобы всегда держать ваше Главное меню доступным, поместите его в , пока цикл, например:

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при желании.

0 голосов
/ 20 октября 2018

Наилучшим подходом будет реализация шаблона проектирования Command .

Однако, если дело в том, что triangleRoutines необходимо вернуться к предыдущему меню, то, учитывая общий текущий подход, я думаю, что изменение в том, где представлено меню, будет работать.Я не уверен, что это вопрос ОП, но я верю в это.

См. Комментарии в коде примера для получения дополнительной информации.

Не проверено, но что-то вроде:

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(), верните ноль, и программа закроется.

Опять же, я мог неправильно понять конкретный вопрос.

...