2016-04-17 1 views
0

Dans JCreator, je dois créer un programme qui me permette de trouver une matrice inverse, j'ai déjà utilisé un code pour trouver une matrice inverse, mais j'ai du mal à obtenir une interface graphique format.Créer une interface graphique qui trouve l'inverse de la matrice

Voici mon aperçu de l'interface graphique à ce jour,

*Matrix 
* 
*/ 


import java.awt.*;  // Java Library 
import javax.swing.*;  // Java Library 
import java.awt.event.*;  // Java Library 

public class Matrix extends JFrame{ // class 

private JTextField jtfSize;  // Text field 
private JTextField jtfElements;  // Text field 
private JTextField jtfResult;  // Text field 
private JLabel jlblSize;  // Label 
private JLabel jlblElements;  // Label 
private JLabel jblblResult;  // Lablel 
private JPanel entryPanel;  // Panel 
private JPanel buttonPanel;  // Panel 
private JButton jbtCalculate;  // Button 

public static void main (String[] args){  // main 
    Matrix Frame = new Matrix();  // Frame 
    frame.setTitle("Matrix Inverse Calcualator");  // Frame Name 
    frame.setSize (500, 500);  // Frame Size 
    frame.setLocation (400, 400);  // Frame Location on Screen 
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);  // Set Close Option 
    frame.setVisible(true);  // 

} 

    public Matrix(){ // 

    jlblSize = new JLabel ("Matrix Size:", JLabel.CENTER);  // Centre Label 
    jlblElements = new JLabel ("Matrix Elements: ", JLabel.CENTER);  // Centre Lable 
    jlblResult = new JLabel ("RESULT: ", JLabel.CENTER);  // Centre Jlabel 
    jtfSize = new JTextField(12);  // Text Field 
    jtfElements = new JTextField(12);  // Text field 12 font 
    jtfResult = new JTextField(12);  // Text Field 12 front 
    entryPanel = new JPanel();  // Panel 

    jtfResult.setEditable(false);  // make RESULT Field uneditable 

    entryPanel.setLayout (new GridLayout (3,2));  // Set layout manager of Panel 

    entryPanel.add(jlblSize);  // Add component to Panel 
    entryPanel.add(jtfSize);  // Add component to Panel 
    entryPanel.add(jlblElements);  // Add component to Panel 
    entryPanel.add(jtfElements);  // Add component to Panel 
    entryPanel.add(jlblResult);  // Add component to Panel 
    entryPanel.add(jtfResult);  // Add component to Panel 

    add(entryPanel, BorderLayout.CENTER);  // add entryPanel to frame 

    jbtCalculate = new JButton("Calculate");  // Add button and insert text for button 
    buttonPanel = new JPanel();   // Creates Panel for Button 

    buttonPanel.add(jbtCalculate);  // insert Calculate button to panel 

    add(buttonPanel, BorderLayout.SOUTH);  // Panel layout 

    jbtCalculate.addMouseListener(new List_ButtonCAL());  // 

    } 
     private class list_ButtonCAL implements MouseListener{  // 

      public void mouseClicked (MouseEvent event){  // 

       double x=Double.parseDouble(jtfSize.getText()); 
       double y=String.parseDouble(jtfElements.getText()); 

       jtfResult.setText(String.); 

      } 
     } 

} 

est maintenant ici le code, je travaille au large, Je ne parviens pas à trouver comment placer ce dans le format graphique.

import java.util.Scanner; // Import Scanner library 

class matrixinverse { // start of class 
public static void main(String argv[]){ // start of main 
    Scanner input = new Scanner(System.in); // input Scanner library 
    System.out.println("Enter the dimension of square matrix: "); // Ouput on screen 
    int n = input.nextInt(); // user inputs figure 
    double a[][]= new double[n][n]; // 
    System.out.println("Enter the elements of matrix: "); // Ouput on screen 
    for(int i=0; i<n; i++) // 
     for(int j=0; j<n; j++) 
      a[i][j] = input.nextDouble(); // 

    double d[][] = invert(a); // 

    System.out.println("The inverse is: "); // Ooutput on screen 
    for (int i=0; i<n; ++i){ // 
     for (int j=0; j<n; ++j) { // 
      System.out.print(d[i][j]+" "); // 
     } // 

     System.out.println(); // 
    } // 
    input.close(); // 
} 

public static double[][] invert(double a[][]){ // 
    int n = a.length; // 
    double x[][] = new double[n][n]; // 
    double b[][] = new double[n][n]; // 
    int index[] = new int[n]; // 
    for (int i=0; i<n; ++i) // 
     b[i][i] = 1; // 
    gaussian(a, index); // 
    for (int i=0; i<n-1; ++i) // 
     for (int j=i+1; j<n; ++j) // 
      for (int k=0; k<n; ++k) // 
       b[index[j]][k] 
         -= a[index[j]][i]*b[index[i]][k]; // 

    for (int i=0; i<n; ++i){ // 
     x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1]; // 
     for (int j=n-2; j>=0; --j){ 
      x[j][i] = b[index[j]][i]; // 
      for (int k=j+1; k<n; ++k) { 
       x[j][i] -= a[index[j]][k]*x[k][i]; // 
      } 
      x[j][i] /= a[index[j]][j]; 
     } 
    } 
    return x; 
} // 

public static void gaussian(double a[][], int index[]){ 
    int n = index.length; // 
    double c[] = new double[n]; // 
    for (int i=0; i<n; ++i) 
     index[i] = i; 

    for (int i=0; i<n; ++i){ 
     double c1 = 0; 
     for (int j=0; j<n; ++j){ 
      double c0 = Math.abs(a[i][j]); 
      if (c0 > c1) c1 = c0; 
     } 
     c[i] = c1; 
    } 

    int k = 0; 
    for (int j=0; j<n-1; ++j){ 
     double pi1 = 0; 
     for (int i=j; i<n; ++i){ 
      double pi0 = Math.abs(a[index[i]][j]); 
      pi0 /= c[index[i]]; 
      if (pi0 > pi1){ 
       pi1 = pi0; 
       k = i; 
      } 
     } 

     int itmp = index[j]; 
     index[j] = index[k]; 
     index[k] = itmp; 
     for (int i=j+1; i<n; ++i) 
     { 
      double pj = a[index[i]][j]/a[index[j]][j]; 

      a[index[i]][j] = pj; 

      for (int l=j+1; l<n; ++l) 
       a[index[i]][l] -= pj*a[index[j]][l]; 
     } 
    } 
} 
} 

Toute aide sera appréciée. Merci d'avance :)

+0

Une interface graphique ne doit jamais trouver l'inverse d'une matrice. Les interfaces graphiques peuvent vous permettre d'entrer une matrice; ils pourraient afficher l'inverse d'une matrice; mais l'inversion de la matrice doit être faite dans un code non-GUI. –

+0

C'est une mission pour l'université. Je suis obligé de le faire en format GUI – Lee

Répondre

0

Je vous recommande de rechercher MVC (model-view-controller) ou un autre type d'installation pour les interfaces graphiques. Comme il s'agit d'un projet assez simple, MVC peut être légèrement trop puissant, mais la base de ce projet serait d'avoir une classe séparée qui exécute les calculs, recevant et envoyant des informations à l'interface graphique (vue). Dans votre cas, lorsque vous appuyez sur jbtCalculate, l'autre classe lira les informations hors de l'interface graphique, puis effectuera les calculs avant de renvoyer les données. Si vous avez des questions à propos de MVC, certaines des réponses sur this link pourraient vous aider à démarrer.

+0

Je vais jeter un oeil, merci! – Lee