Anteriormente había compartido una sencilla interfaz de calculadora de matriz en Java, pero el ejercicio esta algo incompleto, ya que no cuenta con alguna operación, funcional. En este articulo complementare el ejercicio 😉 Para que puedas ver las re utilización de código en Java, usare los métodos de otras fuentes para realizar las operaciones, claro, usando mi propia interfaz 🙂
Operaciones En Calculadora De Matriz En Java
¿Que encontrarás en este articulo? Tendrás una calculadora de matriz en Java totalmente funcional, en la cual podrás realizar suma, resta y multiplicación entre dos matrices, multiplicación de una matriz por un escalar, además de tener la opción de limpiar las operaciones que hayas realizado con la calculadora de matriz en Java.
Lo Que Tendrás
Como se ha dicho, se ha usado un anterior ejemplo con el cual solo se tenia la interfaz de la calculadora, en este articulo ya funcionara la calculadora, como se puede ver en la siguiente imagen:
O te dejo el siguiente vídeo, donde te explico como funciona el código que encontrarás en este articulo 😉
Código De Calculadora De Matriz En Java
No es bueno alargar esto de compartir el código, verdad? Pues bien, al igual que el ejercicio de la interfaz de calculadora de matriz en Java, este ejemplo cuenta con las mismas clases, además de tener una adicional donde se manejan las operaciones, claro, espero que al igual que como lo hice, respeten la fuente de los métodos necesarios para las operaciones con las matrices.
Clase Principal: Contiene el método main y el código necesario para dar un diseño dependiendo si se ejecuta en Windows ó Linux.
Clase Interfaz: Contiene el código necesario para mostrar una ventana con sus respectivos elementos, además de manejar los eventos de cada objetos como un botón ó un choice.
Clase Operaciones: Contiene los métodos necesarios para realizar las respectivas operaciones, si deseas añadir mas funciones a la calculadora, solo tendrías que añadir los métodos a esta clase.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class CalculadoraMatrizJ { 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"); interfazMatriz1 objClasInteMat = new interfazMatriz1(); // TODO code application logic here } catch (ClassNotFoundException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(CalculadoraMatrizJ.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"); interfazMatriz1 objClasInteMat = new interfazMatriz1(); // TODO code application logic here } catch (ClassNotFoundException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } } } } |
import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class CalculadoraMatrizJ { 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"); interfazMatriz1 objClasInteMat = new interfazMatriz1(); // TODO code application logic here } catch (ClassNotFoundException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(CalculadoraMatrizJ.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"); interfazMatriz1 objClasInteMat = new interfazMatriz1(); // TODO code application logic here } catch (ClassNotFoundException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(CalculadoraMatrizJ.class.getName()).log(Level.SEVERE, null, ex); } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 | import java.awt.BorderLayout; 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 interfazMatriz1 implements ActionListener { JFrame winPrinInterMat; JMenuBar barraMenu; JMenu jMenu1; JMenuItem jMenu11; Panel jPMatriz1, jPMatriz2, jpEscalar, jPOperaciones; JLabel jlNumeroEscalar; JTextField jTMatriz1[][], jTMatriz2[][], jtEscalar; Choice chMatriz11, chMatriz12, chMatriz21, chMatriz22; JButton jbLimpiar, jbSuma, jbResta, jbMulti, jbMultiMulti; public interfazMatriz1() { 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("Salir"); //Añadir Item al menu 1 jMenu1.add(jMenu11); //Añadiendo menus a la barra de menu barraMenu.add(jMenu1); //añadiendo eventos de click jMenu11.addActionListener(this); } public void operaciones() { jPOperaciones = new Panel(); jPOperaciones.setLayout(null); 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")); 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(jbLimpiar); jPOperaciones.add(jbSuma); jPOperaciones.add(jbResta); jPOperaciones.add(jbMulti); jPOperaciones.add(jbMultiMulti); 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 jpEscalar() { jpEscalar = new Panel(); jpEscalar.setLayout(null); //creando componentes jlNumeroEscalar = new JLabel("* Escalar "); jtEscalar = new JTextField(4); //ubicando componentes jlNumeroEscalar.setBounds(10, 40, 100, 20); jtEscalar.setBounds(120, 40, 40, 20); //añadiendo componentes al panel jpEscalar.add(jlNumeroEscalar); jpEscalar.add(jtEscalar); jpEscalar.setVisible(false); jpEscalar.setSize(250, 150); } 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(); } public int[][] tomarValores(JTextField trin[][]) { int temp[][] = new int[trin.length][trin[0].length]; for (int i = 0; i < trin.length; i++) { for (int j = 0; j < trin[0].length; j++) { temp[i][j] = Integer.parseInt(trin[i][j].getText()); } } return temp; } @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) { 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())) { temp = operaciones.sumarDosMatrices(tomarValores(jTMatriz1), tomarValores(jTMatriz2)); ventanaRespuesta resp = new ventanaRespuesta(temp); } 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())) { temp = operaciones.restarDosMatrices(tomarValores(jTMatriz1), tomarValores(jTMatriz2)); ventanaRespuesta resp = new ventanaRespuesta(temp); } else { JOptionPane.showMessageDialog(null, "No se puede realizar la Resta."); } } } else if (e.getSource() == jbMulti) {//evento boton para multiplicar una matriz por un escalar entero if (jTMatriz1 != null) { int escalar; escalar = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el escalar a multiplicar")); temp = operaciones.matrizPorEscalar(tomarValores(jTMatriz1), escalar); ventanaRespuesta resp = new ventanaRespuesta(temp); } else { JOptionPane.showMessageDialog(null, "La primera matriz debe existir npara realizar la multiplicacion."); } } else if (e.getSource() == jbMultiMulti) {//evento boton para multiplicar dos matrices if (jTMatriz1 != null && jTMatriz2 != null) { if (chMatriz12.getSelectedIndex() == chMatriz21.getSelectedIndex()) { temp = operaciones.multiplicarDosMatrices(tomarValores(jTMatriz1), tomarValores(jTMatriz2)); ventanaRespuesta resp = new ventanaRespuesta(temp); } else { JOptionPane.showMessageDialog(null, "La columna de la primer matriz, debe ser n" + "igual al numero de filas de la segunda matriz."); } } else { JOptionPane.showMessageDialog(null, "Ambas matrices deben de estar activas n" + "para poder realizar la multiplicacion."); } } else if (e.getSource() == jbLimpiar) { //evento para limpiar matriz para los numeros, ademas de setear los choice if (jTMatriz1 != null && jTMatriz2 == null) { for (int i = 0; i < jTMatriz1.length; i++) { for (int j = 0; j < jTMatriz1[0].length; j++) { jTMatriz1[i][j].setVisible(false); } } chMatriz11.select(0); chMatriz12.select(0); chMatriz11.repaint(); chMatriz12.repaint(); } else if (jTMatriz1 != null && jTMatriz2 != null) { for (int i = 0; i < jTMatriz1.length; i++) { for (int j = 0; j < jTMatriz1[0].length; j++) { jTMatriz1[i][j].setVisible(false); } } for (int i = 0; i < jTMatriz2.length; i++) { for (int j = 0; j < jTMatriz2[0].length; j++) { jTMatriz2[i][j].setVisible(false); } } jTMatriz1 = null; jTMatriz2 = null; chMatriz11.select(0); chMatriz12.select(0); chMatriz21.select(0); chMatriz22.select(0); chMatriz11.repaint(); chMatriz12.repaint(); chMatriz21.repaint(); chMatriz22.repaint(); } } } 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!"); } } } } } |
import java.awt.BorderLayout; 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 interfazMatriz1 implements ActionListener { JFrame winPrinInterMat; JMenuBar barraMenu; JMenu jMenu1; JMenuItem jMenu11; Panel jPMatriz1, jPMatriz2, jpEscalar, jPOperaciones; JLabel jlNumeroEscalar; JTextField jTMatriz1[][], jTMatriz2[][], jtEscalar; Choice chMatriz11, chMatriz12, chMatriz21, chMatriz22; JButton jbLimpiar, jbSuma, jbResta, jbMulti, jbMultiMulti; public interfazMatriz1() { 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("Salir"); //Añadir Item al menu 1 jMenu1.add(jMenu11); //Añadiendo menus a la barra de menu barraMenu.add(jMenu1); //añadiendo eventos de click jMenu11.addActionListener(this); } public void operaciones() { jPOperaciones = new Panel(); jPOperaciones.setLayout(null); 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")); 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(jbLimpiar); jPOperaciones.add(jbSuma); jPOperaciones.add(jbResta); jPOperaciones.add(jbMulti); jPOperaciones.add(jbMultiMulti); 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 jpEscalar() { jpEscalar = new Panel(); jpEscalar.setLayout(null); //creando componentes jlNumeroEscalar = new JLabel("* Escalar "); jtEscalar = new JTextField(4); //ubicando componentes jlNumeroEscalar.setBounds(10, 40, 100, 20); jtEscalar.setBounds(120, 40, 40, 20); //añadiendo componentes al panel jpEscalar.add(jlNumeroEscalar); jpEscalar.add(jtEscalar); jpEscalar.setVisible(false); jpEscalar.setSize(250, 150); } 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(); } public int[][] tomarValores(JTextField trin[][]) { int temp[][] = new int[trin.length][trin[0].length]; for (int i = 0; i < trin.length; i++) { for (int j = 0; j < trin[0].length; j++) { temp[i][j] = Integer.parseInt(trin[i][j].getText()); } } return temp; } @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) { 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())) { temp = operaciones.sumarDosMatrices(tomarValores(jTMatriz1), tomarValores(jTMatriz2)); ventanaRespuesta resp = new ventanaRespuesta(temp); } 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())) { temp = operaciones.restarDosMatrices(tomarValores(jTMatriz1), tomarValores(jTMatriz2)); ventanaRespuesta resp = new ventanaRespuesta(temp); } else { JOptionPane.showMessageDialog(null, "No se puede realizar la Resta."); } } } else if (e.getSource() == jbMulti) {//evento boton para multiplicar una matriz por un escalar entero if (jTMatriz1 != null) { int escalar; escalar = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el escalar a multiplicar")); temp = operaciones.matrizPorEscalar(tomarValores(jTMatriz1), escalar); ventanaRespuesta resp = new ventanaRespuesta(temp); } else { JOptionPane.showMessageDialog(null, "La primera matriz debe existir npara realizar la multiplicacion."); } } else if (e.getSource() == jbMultiMulti) {//evento boton para multiplicar dos matrices if (jTMatriz1 != null && jTMatriz2 != null) { if (chMatriz12.getSelectedIndex() == chMatriz21.getSelectedIndex()) { temp = operaciones.multiplicarDosMatrices(tomarValores(jTMatriz1), tomarValores(jTMatriz2)); ventanaRespuesta resp = new ventanaRespuesta(temp); } else { JOptionPane.showMessageDialog(null, "La columna de la primer matriz, debe ser n" + "igual al numero de filas de la segunda matriz."); } } else { JOptionPane.showMessageDialog(null, "Ambas matrices deben de estar activas n" + "para poder realizar la multiplicacion."); } } else if (e.getSource() == jbLimpiar) { //evento para limpiar matriz para los numeros, ademas de setear los choice if (jTMatriz1 != null && jTMatriz2 == null) { for (int i = 0; i < jTMatriz1.length; i++) { for (int j = 0; j < jTMatriz1[0].length; j++) { jTMatriz1[i][j].setVisible(false); } } chMatriz11.select(0); chMatriz12.select(0); chMatriz11.repaint(); chMatriz12.repaint(); } else if (jTMatriz1 != null && jTMatriz2 != null) { for (int i = 0; i < jTMatriz1.length; i++) { for (int j = 0; j < jTMatriz1[0].length; j++) { jTMatriz1[i][j].setVisible(false); } } for (int i = 0; i < jTMatriz2.length; i++) { for (int j = 0; j < jTMatriz2[0].length; j++) { jTMatriz2[i][j].setVisible(false); } } jTMatriz1 = null; jTMatriz2 = null; chMatriz11.select(0); chMatriz12.select(0); chMatriz21.select(0); chMatriz22.select(0); chMatriz11.repaint(); chMatriz12.repaint(); chMatriz21.repaint(); chMatriz22.repaint(); } } } 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!"); } } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | public class operaciones { //Fuente de los siguientes metodos http://www.taringa.net/posts/ciencia-educacion/14534230/Algunos-Ejemplos-De-Matrices-Java.html public static int[][] sumarDosMatrices(int[][] a, int[][] b) { // En este metodo se supone que las 2 matrices tienen el mismo tamaño int matrizResultante[][]; int i, j, filasA, columnasA; filasA = a.length; columnasA = a[0].length; matrizResultante = new int[filasA][columnasA]; for (i = 0; i < filasA; i++) { for (j = 0; j < columnasA; j++) { matrizResultante[i][j] = a[i][j] + b[i][j]; } } return matrizResultante; } public static int[][] restarDosMatrices(int[][] a, int[][] b) { // En este metodo se supone que las 2 matrices tienen el mismo tamaño int matrizResultante[][]; int i, j, filasA, columnasA; filasA = a.length; columnasA = a[0].length; matrizResultante = new int[filasA][columnasA]; for (i = 0; i < filasA; i++) { for (j = 0; j < columnasA; j++) { matrizResultante[i][j] = a[i][j] - b[i][j]; } } return matrizResultante; } public static int[][] multiplicarDosMatrices(int[][] a, int[][] b) { int sum, c [][] = new int [a.length][b[0].length]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < b[0].length; j++) { sum=0; for(int k=0;k < a[0].length;k++){ sum += a[i][k]*b[k][j]; } c[i][j]=sum; } } return c; } //Fin metodos de Taringa //el siguiente metodo se saco de la siguiente URL http://javayourmind.blogspot.com/2010/11/producto-de-una-matriz-por-un-escalar.html public static int[][] matrizPorEscalar(int[][] a, int b) { int[][] matrizResultado = new int[a.length][a[0].length]; for (int i = 0; i != a.length; i++) { for (int j = 0; j != a[i].length; j++) { matrizResultado[i][j] = a[i][j] * b; //simplemente se multiplica cada valor de la matriz por el valor escalar. } } return matrizResultado; } } |
public class operaciones { //Fuente de los siguientes metodos http://www.taringa.net/posts/ciencia-educacion/14534230/Algunos-Ejemplos-De-Matrices-Java.html public static int[][] sumarDosMatrices(int[][] a, int[][] b) { // En este metodo se supone que las 2 matrices tienen el mismo tamaño int matrizResultante[][]; int i, j, filasA, columnasA; filasA = a.length; columnasA = a[0].length; matrizResultante = new int[filasA][columnasA]; for (i = 0; i < filasA; i++) { for (j = 0; j < columnasA; j++) { matrizResultante[i][j] = a[i][j] + b[i][j]; } } return matrizResultante; } public static int[][] restarDosMatrices(int[][] a, int[][] b) { // En este metodo se supone que las 2 matrices tienen el mismo tamaño int matrizResultante[][]; int i, j, filasA, columnasA; filasA = a.length; columnasA = a[0].length; matrizResultante = new int[filasA][columnasA]; for (i = 0; i < filasA; i++) { for (j = 0; j < columnasA; j++) { matrizResultante[i][j] = a[i][j] - b[i][j]; } } return matrizResultante; } public static int[][] multiplicarDosMatrices(int[][] a, int[][] b) { int sum, c [][] = new int [a.length][b[0].length]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < b[0].length; j++) { sum=0; for(int k=0;k < a[0].length;k++){ sum += a[i][k]*b[k][j]; } c[i][j]=sum; } } return c; } //Fin metodos de Taringa //el siguiente metodo se saco de la siguiente URL http://javayourmind.blogspot.com/2010/11/producto-de-una-matriz-por-un-escalar.html public static int[][] matrizPorEscalar(int[][] a, int b) { int[][] matrizResultado = new int[a.length][a[0].length]; for (int i = 0; i != a.length; i++) { for (int j = 0; j != a[i].length; j++) { matrizResultado[i][j] = a[i][j] * b; //simplemente se multiplica cada valor de la matriz por el valor escalar. } } return matrizResultado; } }
Posibles Problemas
Para ver las opciones que brinda la interfaz, se usaron algunas imágenes para los botones de las operaciones, es por esto que si copias, pegas y ejecutas los anteriores códigos, no podras ver los botones como son, para esto tendras dos opciones. 1. Tener tus propias imagenes, para esto, tendrán que tener un tamaño de 30 x 31 (ancho x alto). 2. Descargar el código fuente con las clases y las imágenes, este te sera útil si deseas añadir y ejecutar sin ningún problema.
Descargar El Código Fuente
Quieres la misma aplicación que he compartido sin ningún problema? Tranquilo, además de copiar y usar el anterior código fuente, podrás descargar el archivo del pequeño ejemplo. Pero antes que puedas descargarlo, te pediré una pequeña acción social, ya sea en Facebook, Twitter ó G+, con esto ayudarás a que otras personas conozcan este articulo 😉
resulta que no eres docente man
NO me marco error ni nada, segui todos tus pasos pero no me compilo, no me aparece el recuadro
Chabots, no copien este proyecto para entregar yo me dare cuenta si lo hacen y les bajare 3 puntos de su calificacion de evidencia, asi que evitense la molestia.
-ATTE: M.T.I Iracema Niltza Gonzalez
Hola, creo que antes de no fomentar la copia de código deberías de fomentar la innovación, es decir: Copien pero mejoren el código. Lo mejor es que modifiques las reglas, que el que se copie de este código, debe de incluir dos mejoras las cuales deben de ser explicadas en detalle y así saber si aplicaron lo que han aprendido, esto lo haría si fuera el docente.
Pero resulta que no eres docente men :v
vale buen proyecto…
Disculpen tengo un problema con el Programa si me puedes compartir el Programa que corra bien? Porfavor lo ocupo mucho
Gracias