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
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