Aquí te dejo un código que creo que funciona, revísalo a ver si te sirve. De cualquier manera, yo empezaría desde cero definiendo la matriz en una clase independiente de donde está el método main porque de esta manera el código no queda bien.
La cuestión es que para insertar una columna tienes que modificar las dimensiones de la matriz. Lo más lógico que he visto es crear una nueva matriz donde insertamos las mismas columnas que había antes más una columna adicional. Una vez está creada esta nueva matriz, desreferenciamos la anterior matriz y hacemos que apunte a la nueva matriz.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class insertar_columna {
static InputStreamReader isr = new InputStreamReader(System.in);
static BufferedReader buff = new BufferedReader(isr);
final static int MAX = 10;
static int matriz[][];
public static void main(String[] args) throws IOException {
int fil = 0, i = 0, j = 0, col = 0;
do {
System.out.println("Cuantas filas? ");
fil = Integer.parseInt(buff.readLine());
if (fil > MAX)
System.out.println("Error..,no puede ser mayor de " + MAX);
} while (fil > MAX);
do {
System.out.println("Cuantas Columnas? ");
col = Integer.parseInt(buff.readLine());
if (col > MAX)
System.out.println("Error..,no puede ser mayor de " + MAX);
} while (col > MAX);
matriz = new int[fil][col];
crea_matriz(fil, col);
insertar_col(fil, col);
}
public static void crea_matriz(int fil, int col) {
// crearemos la matriz por filas y de paso el vector suma
for (int i = 0; i < fil; i++) {
for (int j = 0; j < col; j++) {
matriz[i][j] = (int) (Math.random() * 10); // generamos del 0 al
// 9
}
}
for (int x = 0; x < fil; x++) { // muestro matriz
System.out.println();
for (int y = 0; y < col; y++) {
System.out.print(matriz[x][y] + " ");
}
}
}
public static void insertar_col(int fil, int col) throws IOException {
int colum = 0;
System.out.println();
do {
System.out.println("Que Columna quieres insertar? ");
colum = Integer.parseInt(buff.readLine());
if (colum > MAX)
System.out.println("Error..,no puede ser mayor de " + MAX);
} while (colum > MAX);
int[] [] matriz2 = new int[fil][col+1]; //Nuevas dimensiones para la matriz
//Insertamos lo que había antes de esta columna
for (int j = 0; j < colum-1; j++) {
for (int i = 0; i < fil; i++) {
matriz2[i][j] = matriz[i][j];
}
}
//Insertamos la columna
for (int i=0; i<fil; i++) {
matriz2[i][colum-1]=-99;
}
//Insertamos lo que había después de esta columna
for (int j = colum; j < col+1; j++) {
for (int i = 0; i < fil; i++) {
matriz2[i][j] = matriz[i][j-1];
}
}
//Ya tenemos la nueva matriz, matriz2
matriz = matriz2; //Machacamos la antigua matriz
for (int x = 0; x < fil; x++) { // muestro matriz de prueba desordenada
System.out.println();
for (int y = 0; y < col+1; y++) {
System.out.print(matriz[x][y] + " ");
}
}
}
}