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.
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
Metemos una matriz de 3x2 y presionamos Dibujar Matriz
Agrandamos la pantalla y recorremos la matriz con el mouse
Presionamos Borrar Matriz y generamos una de 7x8