Categorías: Java

☕ Interfaz Calculadora De Matriz En Java

Anteriormente he hablado sobre unos ejercicios básicos de Matrices Unidimensionales y Matrices Bidimensionales en Java. Ahora quiero compartir con ustedes algo bastante interesante, una Interfaz Calculadora De Matriz En Java; tiene la capacidad de trabajar dos matrices de tamaño 6 x 6, se puede trabajar suma, resta, multiplicación de matriz por escalar y multiplicación entre dos matrices, contando con una interfaz sencilla, código totalmente comentado.

SUMA Y RESTA DE DOS MATRICES

 

CÓDIGO INTERFAZ CALCULADORA DE MATRIZ EN JAVA

El código en cuestión, esta dividido en dos clases, la principal, y una clase que contiene la interfaz como tal, en esta ultima encontramos los eventos del click y cambio de estado del choice, como también una clase interna, la cual es encargada de mostrar el resultado en una ventana independiente; No te preocupes! el código importante esta documentado 😉

 

Ver Clase Principal....
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class CalculadoraMatriz {
   
    public static void main(String[] args) {        
                
        String ax = System.getProperty("os.name"); //variable que toma el nombre del sistema operativo que se tenga instalado
        
        if(ax.equals("Windows 7") || ax.equals("Windows")){//si es un sistema windows se aplica el skin que tiene java para windows
            try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            interfazMatriz objClasInteMat = new interfazMatriz();
            // TODO code application logic here
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if(ax.equals("Linux")){//si es un sistema linux se aplica el skin que tiene java para linux
            try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            interfazMatriz objClasInteMat = new interfazMatriz();            
            // TODO code application logic here
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(CalculadoraMatriz.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
       
    }
}

 

Ver Clase Interfaz....
import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class trin implements ActionListener {

    JFrame winPrinInterMat;
    JMenuBar barraMenu;
    JMenu jMenu1, jMenu2;
    JMenuItem jMenu11, jMenu12, jMenu21, jMenu22, jMenu23, jMenu24, jMenu31, jMenu32;
    Panel jPMatriz1, jPMatriz2, jpEscalar, jPOperaciones;
    JLabel jlNumeroEscalar;
    JTextField jTMatriz1[][], jTMatriz2[][], jtEscalar;
    Choice chMatriz11, chMatriz12, chMatriz21, chMatriz22;
    JButton jbRealizar, jbLimpiar, jbSuma, jbResta, jbMulti, jbMultiMulti;

    public trin() {
        winPrinInterMat = new JFrame("Calculadora De Matriz");

        winPrinInterMat.setLayout(new BorderLayout(2, 2));

        menuPrincipal();
        operaciones();
        matriz1();
        matriz2();

        winPrinInterMat.add(BorderLayout.NORTH, barraMenu);
        winPrinInterMat.add(BorderLayout.EAST, jPOperaciones);
        winPrinInterMat.add(BorderLayout.WEST, jPMatriz1);
        winPrinInterMat.add(BorderLayout.CENTER, jPMatriz2);

        winPrinInterMat.setSize(640, 480);
        winPrinInterMat.setPreferredSize(new Dimension(640, 480));
        winPrinInterMat.setLocation(80, 50);
        winPrinInterMat.setVisible(true);
        winPrinInterMat.setResizable(false);
        winPrinInterMat.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void menuPrincipal() {

        //Barra de menu, contiene los menus que se muestran y los submenus
        barraMenu = new JMenuBar();

        //Menus
        jMenu1 = new JMenu("Ventana");

        //Opciones primer menu
        jMenu11 = new JMenuItem("Limpiar");
        jMenu12 = new JMenuItem("Salir");

        //Añadir Item al menu 1        
        jMenu1.add(jMenu11);
        jMenu1.add(jMenu12);

        //Añadiendo menus a la barra de menu
        barraMenu.add(jMenu1);

        //añadiendo eventos de click        
        jMenu12.addActionListener(this);
    }

    public void operaciones() {

        jPOperaciones = new Panel();
        jPOperaciones.setLayout(null);

        jbRealizar = new JButton(new ImageIcon("src/imagenes/realizar.png"));
        jbLimpiar = new JButton(new ImageIcon("src/imagenes/limpiar.png"));
        jbSuma = new JButton(new ImageIcon("src/imagenes/suma.png"));
        jbResta = new JButton(new ImageIcon("src/imagenes/resta.png"));
        jbMulti = new JButton(new ImageIcon("src/imagenes/multiplicacion.png"));
        jbMultiMulti = new JButton(new ImageIcon("src/imagenes/multimulti.png"));

        jbRealizar.setBounds(5, 20, 40, 33);
        jbLimpiar.setBounds(5, 60, 40, 33);
        jbSuma.setBounds(5, 100, 40, 33);
        jbResta.setBounds(5, 140, 40, 33);
        jbMulti.setBounds(5, 180, 40, 33);
        jbMultiMulti.setBounds(5, 220, 40, 33);

        jPOperaciones.add(jbRealizar);
        jPOperaciones.add(jbLimpiar);
        jPOperaciones.add(jbSuma);
        jPOperaciones.add(jbResta);
        jPOperaciones.add(jbMulti);
        jPOperaciones.add(jbMultiMulti);

        jbRealizar.addActionListener(this);
        jbLimpiar.addActionListener(this);
        jbSuma.addActionListener(this);
        jbResta.addActionListener(this);
        jbMulti.addActionListener(this);
        jbMultiMulti.addActionListener(this);

        jPOperaciones.setSize(60, 280);
        jPOperaciones.setVisible(true);
    }

    public void matriz1() {

        jPMatriz1 = new Panel();
        jPMatriz1.setLayout(null);

        int f, c;

        JLabel jlNomMat1 = new JLabel("Matriz 1");
        jlNomMat1.setFont(new Font("Verdana", Font.BOLD, 13));

        chMatriz11 = new Choice();
        chMatriz12 = new Choice();

        chMatriz11.addItem("");
        chMatriz12.addItem("");

        //Ciclo para añadir los numeros a los choice
        for (int i = 0; i < 6; i++) {
            chMatriz11.addItem("" + (i + 1));
            chMatriz12.addItem("" + (i + 1));
        }

        jlNomMat1.setBounds(114, 220, 80, 20);
        chMatriz11.setBounds(105, 255, 35, 20);
        chMatriz12.setBounds(145, 255, 35, 20);

        evenChoice evenCh = new evenChoice();

        chMatriz12.addItemListener(evenCh);

        jPMatriz1.add(jlNomMat1);
        jPMatriz1.add(chMatriz11);
        jPMatriz1.add(chMatriz12);

        jPMatriz1.setSize(290, 280);
        jPMatriz1.setVisible(true);
    }

    public void matriz2() {

        jPMatriz2 = new Panel();
        jPMatriz2.setLayout(null);

        int f, c, setX = 50, setY = 5;

        JLabel jlNomMat2 = new JLabel("Matriz 2");
        jlNomMat2.setFont(new Font("Verdana", Font.BOLD, 13));

        chMatriz21 = new Choice();
        chMatriz22 = new Choice();

        chMatriz21.addItem("");
        chMatriz22.addItem("");

        //Ciclo para añadir los numeros a los choice
        for (int i = 0; i < 6; i++) {
            chMatriz21.addItem("" + (i + 1));
            chMatriz22.addItem("" + (i + 1));
        }

        jTMatriz2 = new JTextField[6][6];

        /*ciclo para añadir el jtextfield bidimensional al panel 2, se uso dos variables
         * setX y setY, las cuales sirven para crear y configurar la posicion en cada iteracion,
         * por cada ciclo de j se suma 35 para dar el salto a la siguiente fila
         */        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                jTMatriz2[i][j] = new JTextField(" ");
                jTMatriz2[i][j].setBounds(setX, setY, 30, 30);
                jTMatriz2[i][j].setHorizontalAlignment(JTextField.RIGHT);
                setX += 35;
            }
            setX = 50;
            setY += 35;
        }

        /*ciclo para añadir los jtextfield al panel 2 y configurar la visibilidad*/        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                jPMatriz2.add(jTMatriz2[i][j]);
                jTMatriz2[i][j].setVisible(false);
            }
        }

        jlNomMat2.setBounds(114, 220, 80, 20);
        chMatriz21.setBounds(105, 255, 35, 20);
        chMatriz22.setBounds(145, 255, 35, 20);

        evenChoice evenCh = new evenChoice();

        chMatriz22.addItemListener(evenCh);

        jPMatriz2.add(jlNomMat2);
        jPMatriz2.add(chMatriz21);
        jPMatriz2.add(chMatriz22);

        jPMatriz2.setSize(290, 280);
        jPMatriz2.setVisible(true);
    }

    public void generarMat1(int f, int c) {
        //Metodo para posicionar cuadros de texto de la primera matriz

        int setX = 50, setY = 5;

        jTMatriz1 = new JTextField[f][c];

        /*ciclo para añadir el jtextfield bidimensional al panel 1, se uso dos variables
         * setX y setY, las cuales sirven para crear y configurar la posicion en cada iteracion,
         * por cada ciclo de j se suma 35 para dar el salto a la siguiente fila
         */        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                jTMatriz1[i][j] = new JTextField("");
                jTMatriz1[i][j].setBounds(setX, setY, 30, 30);
                jTMatriz1[i][j].setHorizontalAlignment(JTextField.RIGHT);
                setX += 35;
            }
            setX = 50;
            setY += 35;
        }

        /*ciclo para añadir los jtextfield al panel 2 y configurar la visibilidad*/        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                jPMatriz1.add(jTMatriz1[i][j]);
                jTMatriz1[i][j].setVisible(false);
            }
        }

        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                jTMatriz1[i][j].setVisible(true);
            }
        }
        winPrinInterMat.pack();
    }

    public void generarMat2(int f, int c) {
        //Metodo para posicionar cuadros de texto de la segunda matriz

        int setX = 50, setY = 5;

        jTMatriz2 = new JTextField[f][c];

        /*ciclo para añadir el jtextfield bidimensional al panel 1, se uso dos variables
         * setX y setY, las cuales sirven para crear y configurar la posicion en cada iteracion,
         * por cada ciclo de j se suma 35 para dar el salto a la siguiente fila
         */        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                jTMatriz2[i][j] = new JTextField("");
                jTMatriz2[i][j].setBounds(setX, setY, 30, 30);
                jTMatriz2[i][j].setHorizontalAlignment(JTextField.RIGHT);
                setX += 35;
            }
            setX = 50;
            setY += 35;
        }

        /*ciclo para añadir los jtextfield al panel 2 y configurar la visibilidad*/        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                jPMatriz2.add(jTMatriz2[i][j]);
                jTMatriz2[i][j].setVisible(false);
            }
        }

        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                jTMatriz2[i][j].setVisible(true);
            }
        }
        winPrinInterMat.pack();
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        /*Usamos el getSource para saber si el evento fue hecho de determinado componente
         * para esto lo comparamos con el == y el nombre, en cada bloque se ejecuta lo que 
         * deseemos que haga la aplicacion deacuerdo al componente "seleccionado"
         */        int temp[][];
        
        if (e.getSource() == jMenu11) {

        } else if (e.getSource() == jMenu12) {
            System.exit(0);
        } else if (e.getSource() == jbSuma) { //cuando se presiona el boton de la suma
            if (chMatriz11.getSelectedItem().equals("") || chMatriz12.getSelectedItem().equals("")
                    || chMatriz21.getSelectedItem().equals("") || chMatriz22.getSelectedItem().equals("")) {
                JOptionPane.showMessageDialog(null, "Para Sumar dos matrices se deben seleccionarn"
                        + "valores en ambas matrices.");

            } else { //cuando se han seleccionado valores en los choice
                if ((chMatriz11.getSelectedIndex() == chMatriz21.getSelectedIndex())
                        && (chMatriz12.getSelectedIndex() == chMatriz22.getSelectedIndex())) {
                    
                    int [][] res = {{2,3,3}, {3,2,3}};
                    ventanaRespuesta mostrarRespuesta = new ventanaRespuesta(res);
                    
                } else {
                    JOptionPane.showMessageDialog(null, "no se puede realizar la suma");
                }
            }
        } else if (e.getSource() == jbResta) {
            if (chMatriz11.getSelectedItem().equals("") || chMatriz12.getSelectedItem().equals("")
                    || chMatriz21.getSelectedItem().equals("") || chMatriz22.getSelectedItem().equals("")) {
                JOptionPane.showMessageDialog(null, "Para Restar dos matrices se deben seleccionarn"
                        + "valores en ambas matrices.");

            } else { //cuando se han seleccionado valores en los choice
                if ((chMatriz11.getSelectedIndex() == chMatriz21.getSelectedIndex())
                        && (chMatriz12.getSelectedIndex() == chMatriz22.getSelectedIndex())) {
                    
                    int [][] res = {{2,3,3}, {3,2,3}};
                    ventanaRespuesta mostrarRespuesta = new ventanaRespuesta(res);
                    
                } else {
                    JOptionPane.showMessageDialog(null, "No se puede realizar la resta");
                }
            }
        } else if (e.getSource() == jbMulti) {//evento boton para realizar la operacion

        } else if (e.getSource() == jbMultiMulti) {

        }
    }

    public class ventanaRespuesta { //clase que contiene la ventana para mostrar los resultados

        public ventanaRespuesta(int[][] ar) {//constructor, recibe como parametro el arreglo a mostrar

            JFrame ventanaRespuesta = new JFrame("RESPUESTA");
            ventanaRespuesta.setLocation(80, 140);

            JTextArea jtA = new JTextArea(10, 10);

            String ax = ""; //variable para guardar lo del arreglo a mostrar

            //ciclo para mostrar el arreglo que se recibe...
            for (int i = 0; i < ar.length; i++) {
                for (int j = 0; j < ar[i].length; j++) {
                    ax += ar[i][j] + "    ";
                }
                ax += "n";
            }

            jtA.setText(ax);

            ventanaRespuesta.add(jtA);

            ventanaRespuesta.setSize(200, 150);
            ventanaRespuesta.setResizable(false);
            ventanaRespuesta.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            ventanaRespuesta.setVisible(true);
        }
    }

    public class evenChoice implements ItemListener {

        @Override
        public void itemStateChanged(ItemEvent e) {

            int f, c;

            if (e.getSource() == chMatriz12) {
                if (chMatriz11.getSelectedIndex() != 0 && chMatriz12.getSelectedIndex() != 0) {
                    f = Integer.parseInt(chMatriz11.getSelectedItem());
                    c = Integer.parseInt(chMatriz12.getSelectedItem());

                    if (jTMatriz1 != null) {
                        for (int i = 0; i < jTMatriz1.length; i++) {
                            for (int j = 0; j < jTMatriz1[0].length; j++) {
                                jTMatriz1[i][j].setVisible(false);
                            }
                        }
                        jTMatriz1 = null;
                        generarMat1(f, c);
                    } else {
                        generarMat1(f, c);
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Ambos choice tienen que tener un valor!");
                }
            } else if (e.getSource() == chMatriz22) {
                if (chMatriz21.getSelectedIndex() != 0 && chMatriz22.getSelectedIndex() != 0) {
                    f = Integer.parseInt(chMatriz21.getSelectedItem());
                    c = Integer.parseInt(chMatriz22.getSelectedItem());

                    if (jTMatriz2 != null) {
                        for (int i = 0; i < jTMatriz2.length; i++) {
                            for (int j = 0; j < jTMatriz2[0].length; j++) {
                                jTMatriz2[i][j].setVisible(false);
                            }
                        }
                        jTMatriz2 = null;
                        generarMat2(f, c);
                    } else {
                        generarMat2(f, c);
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Ambos choice tienen que tener un valor!");
                }
            }
        }

    }
}

 

Si tuviste la molestia de mirar el código de la interfaz encontrarás que use un arreglo de cuadros de texto para hacer mas dinámico el ejercicio con los arreglos y así evitar pequeñas molestias. Si has sido seguidor de los códigos que he dispuesto, veras que he implementado cosillas que antes he compartido, solo he organizado ideas para hacer esta interfaz 😉

Aclaro, el anterior código solo sirve para tener la interfaz de la calculadora de matrices con sus operaciones basicas, en un futuro articulo complementare mi pequeño diseño con el código de alguien mas para ver la simplicidad de integrar códigos en Java.

WP Dev JaGonzalez

Hijo, esposo y padre de un hermoso niño. Amante de los animales, la tecnología, informática y programación. Si tienes alguna duda, inquietud, comentario o deseas comunicarte directamente conmigo, puedes enviarme un correo electrónico a admin@jagonzalez.org

Ver comentarios

  • Después de devanarme los sesos logré entender lo que usted dice:

    "Aclaro, el anterior código solo sirve para tener la interfaz de la calculadora de matrices con sus operaciones basicas, en un futuro articulo complementare mi pequeño diseño con el código de alguien mas para ver la simplicidad de integrar códigos en Java."

    Solo es la interfaz, pues siempre da como resultado int [][] res = {{2,3,3}, {3,2,3}};
    Para que pudiera funcionar en Windows 8.1 se debe implementar
    if(ax.equals("Windows 7") || ax.equals("Windows") || ax.equals("Windows 8.1")){//si es un sistema windows se aplica el skin que tiene java para windows

    Es una lástima que la calculadora como tal no sea operacional.

    Un abrazo.

  • Hola Amigo, estuve viendo tu programa pero a la hora hacer las operaciones el resultado siempre es el mismo. Seria de gran ayuda si me pudieras compartir tu proyecto corregido por fa, mi correo es dmunguia58@gmail.com

  • Hola, Amigo muy chevere tu programa de casualidad no tienes una calculadora que se puede implementar en andriod y que maneje matrices de 3*3 utilizando el metodo de cramer, te agradezco tu ayuda.

    • Hola amigo, la verdad no, de momento no lo he hecho. Si lo publicaría seria usando algún FrameWork para usar HTML5, JS y CSS. Saludos.

  • Hola Amigo, estuve viendo tu programa y se mira muy chilero... pero a la hora hacer las operaciones los resultados no me dan exactos y siempre aparece el mismo resultado en todas la pruebas que podra hacer?? oye por cierto si tienes un la calculadora de matrices mejorada me la podria compartir amigo.. buena onda este es mi correo cdg.light@gmail.com... espero me puedas ayudar...

  • Hola, me gusta tu codigo, pero al usarlo en netbeans me tira error en la creacion de los objetos que muestran los resultados. espuesta mostrarRespuesta = new ventanaRespuesta(res);
    Con motivo de aprendizaje, me puedes enviar el proyecto para verlo?
    mil gracias.

    JEISON SARRIA, CALI, COLOMBIA
    UNIVERSIDAD ANTONIO JOSE CAMACHO

Compartir
Publicado por
WP Dev JaGonzalez
Etiquetas: arreglosGUI

Entradas recientes

iPhone Hackeado: Qué Hacer para Proteger tu Dispositivo y Asegurar tu Seguridad

¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…

2 meses hace

Cómo Restablecer un iPhone a su Estado de Fábrica

Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…

2 meses hace

Motorola planea lanzar al menos dos nuevos teléfonos Moto G en septiembre

Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…

1 año hace

El equipo de WizardLM afirma que un modelo de IA de terceros les robó el trabajo

Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…

1 año hace

Las fallas del complemento Jupiter X Core amenazaron a 172.000 sitios web con apropiaciones de cuentas

Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…

1 año hace

Consola portátil Xbox: aquí tienes todo lo que necesitas saber al respecto

Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…

1 año hace