当用户单击取消时,如何使用 JOptionPane 从子菜单返回主菜单?
How do I go back to the main menu from a sub menu using JOptionPane when the user clicks cancel?
我正在制作一种方法,其中有多个选项,并且每个选项一旦被选中,都需要让 "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;
}
}
最好的方法是实施 Command
design pattern。
但是,如果重点是 triangleRoutines
需要 return 到上一个菜单,那么考虑到当前的总体方法,我认为对菜单的显示位置进行修改是可行的.我不确定这是 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()
中可以 "cancel" 并且它将 return 一个空的 String
,它不为 null,因此它将显示顶级菜单再次。如果要退出子菜单 triangleRoutines()
则 return null,程序将退出。
同样,我可能误解了具体问题。
当JOptionPane.showInputDialog()对话框被取消或Closed 没有进行选择然后返回 null。您需要处理此 null 并据此采取行动,但您需要决定当它确实发生时您想要做什么。关闭应用程序,重新显示主菜单对话框并强制选择退出菜单选项等。
要始终保持 主菜单 可用,请将其置于 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
。
我正在制作一种方法,其中有多个选项,并且每个选项一旦被选中,都需要让 "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;
}
}
最好的方法是实施 Command
design pattern。
但是,如果重点是 triangleRoutines
需要 return 到上一个菜单,那么考虑到当前的总体方法,我认为对菜单的显示位置进行修改是可行的.我不确定这是 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()
中可以 "cancel" 并且它将 return 一个空的 String
,它不为 null,因此它将显示顶级菜单再次。如果要退出子菜单 triangleRoutines()
则 return null,程序将退出。
同样,我可能误解了具体问题。
当JOptionPane.showInputDialog()对话框被取消或Closed 没有进行选择然后返回 null。您需要处理此 null 并据此采取行动,但您需要决定当它确实发生时您想要做什么。关闭应用程序,重新显示主菜单对话框并强制选择退出菜单选项等。
要始终保持 主菜单 可用,请将其置于 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
。