Para la opcion1, hay que pedir dimensiones de la matriz, filas y columnas. Con estos datos construimos matriz y pasamos a pedir valores mediante bucles anidados.
Para aligerar, no estoy poniendo posibles controles de errores, como que no nos pasen enteros para las filas y columnas, o cadenas vacías para los valores...
Eso es algo que se puede añadir después si fuera necesario.
private static void opcion1() {
//Preguntamos dimensiones de la matriz
int filas = Integer.parseInt(JOptionPane.showInputDialog("¿Cuántas filas tendrá la matriz?"));
int columnas = Integer.parseInt(JOptionPane.showInputDialog("¿Cuántas columnas tendrá la matriz?"));
//Creamos nueva matriz
matriz = new String[filas][columnas];
//Pedimos valores
for (int f = 0; f < filas; f++)
for (int c = 0; c < columnas; c++)
matriz[f][c] = JOptionPane.showInputDialog("Deme un valor...");
JOptionPane.showMessageDialog(null, "Nueva matriz creada",
"Crear matriz", JOptionPane.INFORMATION_MESSAGE);
}
Opcion 2.
Para mostrar la matriz en un JOptionPane, tenemos que construir un String con todos los valores, separados con espacio en blanco y con saltos de línea tras terminar cada fila.
Para ello podemos usar un objeto StringBuilder, con bucles anidados recorremos la matriz y en cada iteración añadimos un valor al StringBuilder.
Luego al final, ya tan solo hay que mostrarlo en un JOptionPane
private static void opcion2() {
//Construiremos un String con los datos de la matriz
StringBuilder datos = new StringBuilder("MATRIZ\n");
for (int f = 0; f < matriz.length; f++) {
for (int c = 0; c < matriz[f].length; c++)
datos.append(matriz[f][c] + " ");
datos.append("\n");//Cada fila acaba con un salto de línea
}
//String construido, lo mostramos
JOptionPane.showMessageDialog(null, datos, "Datos Matriz", JOptionPane.INFORMATION_MESSAGE);
}
Opcion 3.
Prácticamente igual que la opción 2, solo hay que invertir el orden en el que recorremos las filas para invertir la matriz.
private static void opcion3() {
StringBuilder datos = new StringBuilder("MATRIZ\n");
//Para invertir, las filas comienzan desde la última a la primera
for (int f = matriz.length -1 ; f >= 0; f--) {
for (int c = 0; c < matriz[f].length; c++)
datos.append(matriz[f][c] + " ");
datos.append("\n");
}
JOptionPane.showMessageDialog(null, datos, "Matriz invertida", JOptionPane.INFORMATION_MESSAGE);
}
Y ya está, eso es todo. Cualquier cosa que no se entienda, solo hay que preguntar.
Abajo pongo el código final definitivo.
import javax.swing.JOptionPane;
public class MenuMatriz {
//Matriz sobre la que vamos a trabajar
private static String[][] matriz;
//Textp con las opciones del menú
private static final String TEXTO_MENU = "1. Llenar Matriz\n2. Consultar datos de la matriz.\n"
+ "3. Invertir el orden de la matriz\n4. Salir.";
public static void main(String[] args) {
String opcion = "";
boolean salir = false;
while (!salir) {
//Mostramos menú
opcion = JOptionPane.showInputDialog(null, TEXTO_MENU, "Elija opción",
JOptionPane.QUESTION_MESSAGE);
//Si usuario elige botón CANCELAR, equivaldrá a elegir la opción de "Terminar programa"
if (opcion == null)
opcion = "4";
//Comprobamos opcion escogida
switch(opcion) {
case "1":
opcion1();
break;
case "2":
opcion2();
break;
case "3":
opcion3();
break;
case "4":
salir = opcion4();
break;
default:
JOptionPane.showMessageDialog(null, "Opción equivocada",
"Elija opción", JOptionPane.WARNING_MESSAGE);
}
}
//Mensaje final
JOptionPane.showMessageDialog(null, "FIN DE PROGRAMA",
"Terminar programa", JOptionPane.INFORMATION_MESSAGE);
}
private static void opcion1() {
//Preguntamos dimensiones de la matriz
int filas = Integer.parseInt(JOptionPane.showInputDialog("¿Cuántas filas tendrá la matriz?"));
int columnas = Integer.parseInt(JOptionPane.showInputDialog("¿Cuántas columnas tendrá la matriz?"));
//Creamos nueva matriz
matriz = new String[filas][columnas];
//Pedimos valores
for (int f = 0; f < filas; f++)
for (int c = 0; c < columnas; c++)
matriz[f][c] = JOptionPane.showInputDialog("Deme un valor...");
JOptionPane.showMessageDialog(null, "Nueva matriz creada",
"Crear matriz", JOptionPane.INFORMATION_MESSAGE);
}
private static void opcion2() {
//Construiremos un String con los datos de la matriz
StringBuilder datos = new StringBuilder("MATRIZ\n");
for (int f = 0; f < matriz.length; f++) {
for (int c = 0; c < matriz[f].length; c++)
datos.append(matriz[f][c] + " ");
datos.append("\n");//Cada fila acaba con un salto de línea
}
//String construido, lo mostramos
JOptionPane.showMessageDialog(null, datos, "Datos Matriz", JOptionPane.INFORMATION_MESSAGE);
}
private static void opcion3() {
StringBuilder datos = new StringBuilder("MATRIZ\n");
//Para invertir, las filas comienzan desde la última a la primera
for (int f = matriz.length -1 ; f >= 0; f--) {
for (int c = 0; c < matriz[f].length; c++)
datos.append(matriz[f][c] + " ");
datos.append("\n");
}
JOptionPane.showMessageDialog(null, datos, "Matriz invertida", JOptionPane.INFORMATION_MESSAGE);
}
private static boolean opcion4() {
int pregunta = JOptionPane.showConfirmDialog(null, "¿Seguro que quiere salir?",
"Terminar programa", JOptionPane.YES_NO_OPTION);
if (pregunta == JOptionPane.YES_OPTION)
return true;
else
return false;
}
}