HueckelWindow

 

// HueckelWindow.java

import java.awt.*;

public class HueckelWindow extends Frame
{
   Panel dispArea;
   Panel controls;
   Panel matPanel;

   TextField[][] H;
   Matrix inMat, vecMat, eigMat, eigSM;
   MatrixJama hMat, E, V;
   int[][] znum, spnum;                    // Zeilen-Nummerierung, Spalten-Nummerierung
   double[][] eigVec, eigW, eigSpalte, inArr;
   double acc = 0.01;                   // Zahlenformat
   MatrixInt spNumH, spNumV, zNumH, zNumV;
   Label hLab, vLab, eLab;

   Button go;

   GridBagLayout gbl, ingbl, dgbl;
   GridBagConstraints cc, incc, dcc;

   int size;

   Color colBlau, colRot;

   public HueckelWindow(int s)
   {
     super("Hückel-Verfahren");
     size = s;
   }

   public void init()
   {
     znum = new int[size][1];                // für Darstellung der Zeilen-Nummerierung
     for (int i = 0; i < size; i++)
     {
       znum[i][0] = i + 1;
     }

     spnum = new int[1][size];                 // Bestimmung der Anzahl der Spalten
     for (int i = 0; i < size; i++)
     {
       spnum[0][i] = i + 1;
     }

     go = new Button("Go");

     if (size == 4)
     {
       H = new TextField[4][4];
       H[0][0] = new TextField("0", 3);
       H[0][1] = new TextField("-1", 3);
       H[0][2] = new TextField("0", 3);
       H[0][3] = new TextField("0", 3);
       H[1][0] = new TextField("-1", 3);
       H[1][1] = new TextField("0", 3);
       H[1][2] = new TextField("-1", 3);
       H[1][3] = new TextField("0", 3);
       H[2][0] = new TextField("0", 3);
       H[2][1] = new TextField("-1", 3);
       H[2][2] = new TextField("0", 3);
       H[2][3] = new TextField("-1", 3);
       H[3][0] = new TextField("0", 3);
       H[3][1] = new TextField("0", 3);
       H[3][2] = new TextField("-1", 3);
       H[3][3] = new TextField("0", 3);
     }
     else
     {
       H = new TextField[size][size];
       for (int i = 0; i < size; i++)
       {
         for (int j = 0; j < size; j++)
         {
           H[i][j] = new TextField("0", 3);
         }
       }
     }

     hLab = new Label("H");
     hLab.setAlignment(Label.RIGHT);
     vLab = new Label("V");
     vLab.setAlignment(Label.RIGHT);
     eLab = new Label("E");
     eLab.setAlignment(Label.CENTER);

     colBlau = new Color(0, 0, 255);
     colRot = new Color(255, 0, 0);
     zNumH = new MatrixInt(znum);       // Zeilen-Nummerierung der Hückelmatrix
     zNumH.setColor(colBlau);
     zNumV = new MatrixInt(znum);
     zNumV.setColor(colBlau);
     spNumH = new MatrixInt(spnum);
     spNumH.setColor(colBlau);
     spNumV = new MatrixInt(spnum);
     spNumV.setColor(colBlau);

     dispArea = new Panel();      // Display-Bereich für die Matrizen
     controls = new Panel();
     matPanel = new Panel();
     setLayout(new BorderLayout(5, 5));

     add("South", controls);
     add("Center", dispArea);

     ingbl = new GridBagLayout();        // für Hückelmatrix (in für Input)
     incc = new GridBagConstraints();

     matPanel.setLayout(ingbl);        // GridBags für die einzelnen Matrixelemente
     for (int r = 0; r < size; r++)
     {
       for (int c = 0; c < size; c++)
       {
         incc.gridx = c;
         incc.gridy = r;
         ingbl.setConstraints(H[r][c], incc);
         matPanel.add(H[r][c]);
       }
     }

     // Label "H" = Hückelmatrix wird plaziert
     dgbl = new GridBagLayout();
     dcc = new GridBagConstraints();
     dispArea.setLayout(dgbl);
     dcc.fill = GridBagConstraints.BOTH;
     dcc.gridx = 2;
     dcc.gridy = 0;
     dcc.gridwidth = 1;
     dcc.gridheight = 1;
     dgbl.setConstraints(hLab, dcc);
     dispArea.add(hLab);

     // Zeilen-Nummerierung der Hückelmatrix
     dcc.gridx = 2;
     dcc.gridy = 2;
     dcc.gridwidth = 1;
     dcc.gridheight = size;
     dgbl.setConstraints(zNumH, dcc);
     dispArea.add(zNumH);

     // Spalten-Nummerierung der Hückelmatrix
     dcc.gridx = 3;
     dcc.gridy = 1;
     dcc.gridwidth = size;
     dcc.gridheight = 1;
     dgbl.setConstraints(spNumH, dcc);
     dispArea.add(spNumH);

     // Display Hückel-Matrix
     dcc.gridx = 3;
     dcc.gridy = 2;
     dcc.gridwidth = size;
     dcc.gridheight = size;
     dgbl.setConstraints(matPanel, dcc);
     dispArea.add(matPanel);

     inMat = new Matrix(H);             // Input-Labelmatrix;

     inArr = inMat.toDoubleArray();

     hMat = new MatrixJama(inArr);     // JamaMatrix der Inputmatrix
     EigenvalueDecomposition eig = hMat.eig();   // Eigenwert-Bestimmung
     E = eig.getD();                            // Eigenwert-JamaMatrix
     eigW = E.getArray();                        // 2D-Array von Doubles der Eigenwerte
     eigMat = new Matrix(eigW);                  // Eigenwert-Labelmatrix

     System.out.println(" Eigenwerte: ");        // Konsolen-Ausgabe
     E.print(5, 3);

     V = eig.getV();                                // Eigenvektor-JamaMatrix
     System.out.println(" Eigenvektor-Matrix: ");   // Konsolen-Ausgabe
     V.print(5, 3);
     eigVec = V.getArray();                         // 2D-Array von Doubles der Eigenvektoren
     vecMat = new Matrix(eigVec);                   // Eigenvektor-Labelmatrix

     // Label "V" = Eigenvektor-Matrix
     dcc.gridx = 2;
     dcc.gridy = 6 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = 1;
     dgbl.setConstraints(vLab, dcc);
     dispArea.add(vLab);

     // Zeilen-Nummerierung der Eigenvektor-Matrix
     dcc.gridx = 2;
     dcc.gridy = 7 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = size;
     dgbl.setConstraints(zNumV, dcc);
     dispArea.add(zNumV);

     // Spalten-Nummerierung der Vektormatrix
     dcc.gridx = 3;
     dcc.gridy = 6 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = 1;
     dgbl.setConstraints(spNumV, dcc);
     dispArea.add(spNumV);

     // Display Vektormatrix
     dcc.gridx = 3;
     dcc.gridy = 7 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = size;

     vecMat.roundD(acc);
     dgbl.setConstraints(vecMat, dcc);
     dispArea.add(vecMat);

     // Label "E" = Eigenwerte
     dcc.gridx = 3 + size;
     dcc.gridy = 5 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = 1;
     dgbl.setConstraints(eLab, dcc);
     dispArea.add(eLab);

     // Eigenwert-Spalte
     eigSpalte = new double[size][1];
     for (int i = 0; i < size; i++)
     {
       eigSpalte[i][0] = eigW[i][i];
     }

     eigSM = new Matrix(eigSpalte);
     eigSM.setColor(colRot);
     eigSM.roundD(acc);
     dcc.gridx = 3 + size;
     dcc.gridy = 7 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = size;
     dgbl.setConstraints(eigSM, dcc);
     dispArea.add(eigSM);

     // Control-Panel
     gbl = new GridBagLayout();
     controls.setLayout(gbl);

     cc = new GridBagConstraints();

     cc.gridx = 0;
     cc.gridy = 0;
     cc.gridwidth = 2;
     gbl.setConstraints(go, cc);
     controls.add(go);

     validate();
   }

   // Handle events
   public boolean handleEvent(Event evt)
   {
     String minStr, maxStr;
     if (evt.target instanceof Button)
     {
       if (evt.target == go && evt.id == Event.ACTION_EVENT) // When button is clicked
       {
         simulate();
         return true;
       }
     }
     if (evt.id == Event.WINDOW_DESTROY)
     {
       hide();
       dispose();
     }
     return super.handleEvent(evt); // Handle other events as usual
   }

// nach Button go +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   public void simulate()
   {
     dispArea.remove(vecMat);
     dispArea.remove(eigSM);

     inMat = new Matrix(H);
     inArr = inMat.toDoubleArray();

     hMat = new MatrixJama(inArr); // JamaMatrix der Inputmatrix

     EigenvalueDecomposition eig = hMat.eig(); // Eigenwert-Bestimmung
     E = eig.getD(); // Eigenwert-JamaMatrix
     eigW = E.getArray(); // 2D-Array von Doubles der Eigenwerte
     eigMat = new Matrix(eigW); // Eigenwert-Matrix

     System.out.println(" Eigenwerte: ");
     E.print(5, 3);

     V = eig.getV(); // Eigenvektor-JamaMatrix
     System.out.println(" Eigenvektor-Matrix: ");
     V.print(5, 3);
     eigVec = V.getArray(); // 2D-Array von Doubles der Eigenvektoren
     vecMat = new Matrix(eigVec); // Eigenvektor-Matrix

     // Display Vektormatrix
     dcc.gridx = 3;
     dcc.gridy = 7 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = size;
     vecMat.roundD(acc);
     dgbl.setConstraints(vecMat, dcc);
     dispArea.add(vecMat);

     // Display Eigenwerte als Spalte
     eigSpalte = new double[size][1];
     for (int i = 0; i < size; i++)
     {
       eigSpalte[i][0] = eigW[i][i];
     }

     eigSM = new Matrix(eigSpalte);
     eigSM.setColor(colRot);
     eigSM.roundD(acc);
     dcc.gridx = 3 + size;
     dcc.gridy = 7 + size;
     dcc.gridwidth = 1;
     dcc.gridheight = size;
     dgbl.setConstraints(eigSM, dcc);
     dispArea.add(eigSM);

     validate();
   }
}