Introducción

Información investigará las librerías necesarias y realizarán los siguientes programas y generar en java un software de escritorio para crear y graficar una matriz.

Será al algo similar a lo que esta pidiendo el cliente que es esta imagen.
matriz graphic

Solución

La solución que yo pude realizar fue la siguiente por ahí investigando y buscando por le red me encontre con este ejemplo en cuál les voy a publicar el siguiente código lo comparten en https://stackoverflow.com/questions/15421708/how-to-draw-grid-using-swing-class-java-and-detect-mouse-position-when-click-and ya no voy a construir el ejemplo sino que modifique el que comparten.Haciendo lo dinamico y que diga en que posición de la matriz se encuentra.
Creamos una clase llamada Matriz y escribimos el código.
 
  
             
 package com.tutotosoftware.graphicmatrix;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;


import javax.swing.JPanel;
import javax.swing.JTextField;

public class Matriz extends JPanel{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 
	 */
	
        private int columnCount;
       
        JTextField txtColumn = new JTextField(2);
        JTextField txtRow = new JTextField(2);
		private int rowCount;
        private List<Rectangle> cells;
        private Point selectedCell;

        public Matriz() {
        	add(txtColumn);
        	add(txtRow);
            cells = new ArrayList<>(columnCount * rowCount);
            MouseAdapter mouseHandler;
            mouseHandler = new MouseAdapter() {
                @Override
                public void mouseMoved(MouseEvent e) {
                    Point point = e.getPoint();

                    int width = getWidth();
                    int height = getHeight();

                    int cellWidth = width / columnCount;
                    int cellHeight = height / rowCount;
                    
                    
                    
                    int xOffset = (width - (columnCount * cellWidth)) / 2;
                    int yOffset = (height - (rowCount * cellHeight)) / 2;
                    
                    
                    selectedCell = null;
                    if (e.getX() >= xOffset && e.getY() >= yOffset) {

                        int column = (e.getX() - xOffset) / cellWidth;
                        int row = (e.getY() - yOffset) / cellHeight;

                        if (column >= 0 && row >= 0 && column < columnCount && row < rowCount) {

                            selectedCell = new Point(column, row);
                            
                            txtColumn.setText(""+selectedCell.x);
                            txtRow.setText(""+selectedCell.y);
                        }
                        
                    }
                    
                    
                    
                    
                    repaint();

                }
            };
            addMouseMotionListener(mouseHandler);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        public void invalidate() {
            cells.clear();
            selectedCell = null;
            super.invalidate();
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();

            int width = getWidth();
            int height = getHeight();

            int cellWidth = width / columnCount;
            int cellHeight = height / rowCount;

            int xOffset = (width - (columnCount * cellWidth)) / 2;
            int yOffset = (height - (rowCount * cellHeight)) / 2;

            if (cells.isEmpty()) {
                for (int row = 0; row < rowCount; row++) {
                    for (int col = 0; col < columnCount; col++) {
                        Rectangle cell = new Rectangle(
                                xOffset + (col * cellWidth),
                                yOffset + (row * cellHeight),
                                cellWidth,
                                cellHeight);
                     
                        cells.add(cell);
                    }
                }
            }

            if (selectedCell != null) {

                int index = selectedCell.x + (selectedCell.y * columnCount);
                Rectangle cell = cells.get(index);
                
              
                g2d.setColor(Color.BLUE);
                g2d.fill(cell);

            }

            g2d.setColor(Color.GRAY);
            for (Rectangle cell : cells) {
            	
               
              
                g2d.draw(cell);
            }

            g2d.dispose();
        }
        
        
        public int getColumnCount() {
    		return columnCount;
    	}

    	public void setColumnCount(int columnCount) {
    		this.columnCount = columnCount;
    	}

    	public int getRowCount() {
    		return rowCount;
    	}

    	public void setRowCount(int rowCount) {
    		this.rowCount = rowCount;
    	}
    }
            
            
            
            
            
            
                
             

Ahora nombramos una calse llamada Principal
 
  
             
          package com.tutotosoftware.graphicmatrix;


import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Principal {
	
	
	JPanel centralPanel = new JPanel();
	JPanel leftPanel = new JPanel();
    JTextField columnValor = new JTextField(2);
    JTextField rowValor = new JTextField(2);
    JButton dibujarMatriz = new JButton();
    JButton borrarMatriz = new JButton();
    Matriz ma = new Matriz();
    JLabel m= new JLabel();
    JLabel n= new JLabel();
    JFrame frame = new JFrame("Testing");

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
         new Principal();

	}
	
	
	public Principal() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

               
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                
                dibujarMatriz.addActionListener(new ActionListener() {
                	
                	public void actionPerformed(ActionEvent evt) {
      				  dibujarMatrizActionPerformed(evt);
      			  }
                });
                
                borrarMatriz.addActionListener(new ActionListener() {
                	
                	public void actionPerformed(ActionEvent evt) {
      				  borrarMatrizActionPerformed(evt);
      			  }
                });
                dibujarMatriz.setText("Dibujar Matriz");
                borrarMatriz.setText("Borrar Matriz");
                m.setText("M:");
                n.setText("N:");
                
                leftPanel.add(m);
                leftPanel.add(columnValor);
                leftPanel.add(n);
                leftPanel.add(rowValor);
                leftPanel.add(dibujarMatriz);
                leftPanel.add(borrarMatriz);
                centralPanel.setLayout(new GridLayout(1,2));
                centralPanel.add(leftPanel);                
                
                
                frame.add(centralPanel);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
	}
    
	private void dibujarMatrizActionPerformed(ActionEvent e) {
		
		int columna,fila;
		String texto1 = columnValor.getText();
		String texto2 = rowValor.getText();
		try {
		   columna = Integer.parseInt(texto1);
		   fila = Integer.parseInt(texto2);
		   
		   
		   ma.setColumnCount(columna);
		   ma.setRowCount(fila);
		   centralPanel.add(ma);
		   
		   centralPanel.repaint();
		   centralPanel.updateUI();
		} 
		catch (NumberFormatException x) {
		   System.err.println("No se puede convertir a numero");
		   x.printStackTrace();
		}
		


		
		
	}
	
private void borrarMatrizActionPerformed(ActionEvent e) {
		
		

        centralPanel.remove(ma);
        centralPanel.repaint();
		centralPanel.updateUI();
		
	}
	
	
	
}
          
          
          
          
             
             

Probamos la aplicación

matriz graphic
Metemos una matriz de 3x2 y presionamos Dibujar Matriz
matriz graphic
Agrandamos la pantalla y recorremos la matriz con el mouse
matriz graphic
Presionamos Borrar Matriz y generamos una de 7x8
matriz graphic

Conclusión

Has aqui es donde me alcanzo para realizar el ejemplo que me compartieron y yo le comparto lo que le agrege a lo mejor le queda de tarea pintar los valores con drawString

Jar Ejecutable

Este ejemplo fue probado en java 1.8 y windows 10.