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