HueckelEig

   

Run main

 

Lässt man bei "Größe der Matrix" die "4" stehen, wird die Hückelmatrix für ein lineares System aus 4 Atomen (Butadien) erzeugt. Dabei wird für die "verbundenen" Atome "-1" eingesetzt (die kinetische Energie wird bei einem Platzwechsel erniedrigt). Die Spalten der Vektormatrix V stellen dann die Eigenvektoren mit der Reihenfolge 1, 2, 3, 4 dar. Die dazugehörigen Eigenwerte (Energien) sind als Spalte E (in rot) ebenfalls in der Reihenfolge 1, 2, 3, 4 dargestellt.

 
 

Trägt man eine andere Zahl für die Größe der Matrix ein, werden alle Matrixelemente gleich Null gesetzt. Die Hückelmatrix muss dann entsprechend ausgefüllt werden.

Als Beispiel ist unten die Hückelmatrix für einen 5-Ring (Cyclopentadien) ausgefüllt worden. Ein Klick auf "Go" bewirkt die Berechnung.

     
 

UML(mit Hotspots) und Dateistruktur der Hauptklasse (Hueckel). Der Source-Code steht als zip-Datei zur Verfügung (als jGRASP-Projekt). Eine erweiterte Variante /mit File-Handling) findet man hier.

 

 
 

Hueckel.java

// Hueckel.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;

public class Hueckel extends JFrame
{
   private JLabel sizeLabel;
   private JTextField sizeZahl;

   HueckelWindow hw;

   private JButton create;

   // no-argument constructor
   public Hueckel()
   {
     createUserInterface();
   }

   // create and position GUI components; register event handlers
   private void createUserInterface()
   {
     // get content pane for attaching GUI components
     Container contentPane = getContentPane();

     // enable explicit positioning of GUI components
     contentPane.setLayout(null);

     sizeLabel = new JLabel();
     sizeLabel.setBounds(16, 13, 150, 21);         // (int x, int y, int width, int height)
     sizeLabel.setText("Größe der Matrix = ");
     contentPane.add(sizeLabel);

     sizeZahl = new JTextField();
     sizeZahl.setBounds(150, 13, 20, 21);
     sizeZahl.setText("4");
     sizeZahl.setHorizontalAlignment(JTextField.RIGHT);
     contentPane.add(sizeZahl);

     // set up createJButton
     create = new JButton();
     create.setBounds(50, 70, 150, 23);
     create.setText("Create Matrix");
     contentPane.add(create);
     create.addActionListener(new ActionListener()       // anonymous inner class
     {
       // event handler called when calculateJButton is pressed
       public void actionPerformed(ActionEvent event)
       {
         calculateJButtonActionPerformed(event);
       }

     }             // end anonymous inner class

     );            // end call to addActionListener

     // set properties of application's window
     setTitle("Hückel-Matrix");       // set title bar string
     setSize(250, 150);               // set window size
     setVisible(true);                // display window

   }                                  // end method createUserInterface

   private void calculateJButtonActionPerformed(ActionEvent event)
   {
     // get input from JTextFields
     int size = Integer.parseInt(sizeZahl.getText());
     // display error message if user enters invalid input
     if (size <= 0)
     {
       JOptionPane.showMessageDialog(null,"You must enter positive numbers",
                                     "Invalid Input Entered", JOptionPane.ERROR_MESSAGE);
     }
     else
     {
       create(size);
     } // end else
   } // end method calculateJButtonActionPerformed

   public void create(int size)
   {
     hw = new HueckelWindow(size);
     Point p = location();
     hw.move(p.x + 50, p.y + 50);
     hw.init();
     hw.show();
     hw.resize(hw.preferredSize());
     hw.validate();
   }

   // main method
   public static void main(String[] args)
   {
     Hueckel application = new Hueckel();
     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   } // end method main
} // end class Hueckel