import java.applet.*; import java.awt.*; import java.awt.event.*; // en un campo de texto. Se crean los campos de texto necesarios // para pedir los datos de la primera matriz. // se llena la segunda matriz con los datos de la transpuesta de la primera // Se hace subclase de la clase Applet public class Prod_Mat_Trans extends Applet { int Dim = 0; TextField TF1[][], TF2[][]; TextField TFOrden; Button BIgual; Label LX; boolean Pintar = false; int Xdib, Ydib; int RESP[][]; // -Normalmente es la interfaz- public void init() { Label LOrden = new Label("Orden: "); // Etiqueta LX = new Label("x"); TFOrden = new TextField(); // Campo de texto Button BCrear = new Button("Crear"); // Boton Button BLimpiar = new Button("Limpiar"); // Boton BIgual = new Button("="); // Fijar el contenedor setLayout(null); add(LOrden); add(BCrear); add(BLimpiar); add(TFOrden); add(BIgual); add(LX); //LOrden.setBounds(x, y, ancho, alto) LOrden.setBounds(10, 10, 80, 30); TFOrden.setBounds(100, 10, 80, 30); BCrear.setBounds(10, 50, 80, 30); BLimpiar.setBounds(100, 50, 80, 30); // Captura de los eventos BCrear.addActionListener(new EventoBoton()); BLimpiar.addActionListener(new EventoBoton()); BIgual.addActionListener(new EventoBoton()); BIgual.setVisible(false); Pide_Datos(Dim); } public void paint(Graphics R) { int x = 0, y = Ydib; int Ancho = 30, Alto = 30; String CAD = ""; if (Pintar) { for (int r = 0; r < Dim; r++) { x = Xdib + 10; for (int c = 0; c < Dim; c++) { CAD = "" + RESP[r][c]; x += Ancho + 2; // El 2 es por la separaciòn entre celdas R.drawRect(x,y, Ancho, Alto); R.drawString(CAD, x+Ancho/2-CAD.length()/2*8, y+Alto/2); } y += Alto + 2; // El 2 es por la separaciòn entre celdas } } else R.clearRect(0, 0, 500, 500); } // Hacer invisibles a todos los componentes que forman las matrices void Limpia_Datos(int Dim) { for (int r = 0; r < Dim; r++) for (int c = 0; c < Dim; c++) { TF1[r][c].setVisible(false); TF2[r][c].setVisible(false); } Pintar = false; // Ya no ejecuta el dibujo en paint } // Muestra las 2 matrices de campos de texto y la segunda // la deja inaccesible al usuario. void Pide_Datos(int Dim) { // Se dimensionan las matrices de campos de texto. TF1 = new TextField[Dim][Dim]; TF2 = new TextField[Dim][Dim]; int x = 50, y = 100, r; // Variables para el posicionamiento de los campos de texto for (r = 0; r < Dim; r++) { x = 50; for (int c = 0; c < Dim; c++) { // Primera matriz TF1[r][c].setBounds(x, y, 30, 30); // Posicionar en el contenedor // Segunda matriz TF2[r][c].setBounds(x+35*Dim+50, y, 30, 30); // Posicionar en el contenedor TF2[r][c].setEditable(false); // Dejar inaccesible al usuario x += 35; } y += 35; } LX.setBounds(50 + 35*Dim, 90 + 35 * Dim/2, 30, 30); Xdib = x+35*Dim+50; Ydib = 100 + 30*Dim / 2; contenedor } public class EventoBoton implements ActionListener { public void actionPerformed(ActionEvent RAFA) { String Boton = RAFA.getActionCommand(); Dim = Integer.parseInt(TFOrden.getText()); // Se compara con "Crear" if (Boton.equals("Crear")) { Pide_Datos(Dim); } // Se compara con "Limpiar" if (Boton.equals("Limpiar")) Limpia_Datos(Dim); // Se compara con "=" if (Boton.equals("=")) { Transpuesta(); Producto(); } } } // Se obtiene la transpuesta de la matriz rellenando los campos de texto // de la segunda matriz con los datos de la primera void Transpuesta() { for (int r1 = 0; r1 < Dim; r1++) for (int c1 = 0; c1 < Dim; c1++) TF2[r1][c1].setText(TF1[c1][r1].getText()); } // Producto de la matriz void Producto() { RESP = new int[Dim][Dim]; for (int r1 = 0; r1 < Dim; r1++) { for (int c1 = 0; c1 < Dim; c1++) { RESP[r1][c1] = 0; for (int r2 = 0; r2 < Dim; r2++) RESP[r1][c1] += Integer.parseInt(TF1[r1][r2].getText()) * Integer.parseInt(TF2[r2][c1].getText()); } } Pintar = true; repaint(); } }