20.3 GUI für ggT und kgV - Rechner
 
ein Rechner entsteht

Die nächsten beiden Bilder zeigen einen Rechner, der über zwei Funktionen verfügt. In den Eingabefeldern werden die Werte von a und b eingegeben. In unserem Beispiel sind es die Werte 144 bzw. 60. Im Ausgabefeld erscheint,


je nachdem, welcher Button gedrückt wurde der ggT der beiden Zahlen, also 12 bzw. das kgV der beiden Zahlen, also 720. In diesem Kapitel lernen wir, wie wir ein Javaprogramm schreiben, das auf Drücken unterschiedlicher Buttons auch unterschiedlich reagiert. Wir schauen uns dazu den Quelltext des Programms etwas genauer an.

Um die beiden Eingabefelder für den Benutzer unterscheidbar zu machen, sollen ihnen Beschriftungen beigefügt werden. In Java, sind dies sog. Labelobjekte.  Da der Norden in vier Felder und das Zentrum in zwei nebeneinander stehende Felder unterteilt werden sollen, deklarieren wir ein nordPanel und ein centerPanel und versehen beide mit einem sog. Gridlayout. Ein Blickj in die API zeigt, dass drei Gridlayout-Konstruktoren zur Verfügung stehen:

 

Constructor Summary
GridLayout()
          Creates a grid layout with a default of one column per component, in a single row.
GridLayout(int rows, int cols)
          Creates a grid layout with the specified number of rows and columns.
GridLayout(int rows, int cols, int hgap, int vgap)
          Creates a grid layout with the specified number of rows and columns.

Das Feld, das wir dem Norden zuweisen, bekommt ein Layout über den ersten, das Feld des Zentrums ein Layout des dritten Konstruktors. hgab und vgab definieren dabei die horizontalen bzw. vertikalen Abstände zwischen den Zellen.

Dass bei der Ereignisbehandlung unterschieden werden muss, welcher Schalter das Ereignis ausgelöst hat, haben wir schon früher kennen gelernt.
 

Download:

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

public class RechnerGUI extends JFrame implements ActionListener{
  // Anfang Variablen
  JPanel centerPanel, nordPanel;
  JLabel aLabel, bLabel;
  JButton ggTButton, kgVButton;
  JTextField eingabeFeldA, eingabeFeldB, ausgabeFeld;
  // Ende Variablen

  public RechnerGUI (String title) {
    // Frame-Initialisierung
    super (title);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(250, 100);
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

    nordPanel = new JPanel(new GridLayout());
    cp.add(nordPanel,BorderLayout.NORTH);

    centerPanel = new JPanel(new GridLayout(1,2,10,10));
    cp.add(centerPanel,BorderLayout.CENTER);


    // Anfang Komponenten

    aLabel = new JLabel("a:");
    nordPanel.add(aLabel);

    eingabeFeldA = new JTextField("0");
    eingabeFeldA.setHorizontalAlignment(eingabeFeldA.RIGHT);
    nordPanel.add(eingabeFeldA);

    bLabel = new JLabel("b:");
    nordPanel.add(bLabel);

    eingabeFeldB = new JTextField("0");
    eingabeFeldB.setHorizontalAlignment(eingabeFeldB.RIGHT);
    nordPanel.add(eingabeFeldB);


    ggTButton = new JButton("ggT");
    centerPanel.add(ggTButton);
    ggTButton.addActionListener(this);

    kgVButton = new JButton("kgV");
    centerPanel.add(kgVButton);
    kgVButton.addActionListener(this);

    ausgabeFeld = new JTextField();
    ausgabeFeld.setHorizontalAlignment(ausgabeFeld.RIGHT);
    cp.add(ausgabeFeld,BorderLayout.SOUTH);
    ausgabeFeld.setEditable(false);

    // Ende Komponenten

    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void actionPerformed(ActionEvent e){

    String ausgabeText="";
    int eingabeWertA = Integer.parseInt(eingabeFeldA.getText());
    int eingabeWertB = Integer.parseInt(eingabeFeldB.getText());

    Object obj = e.getSource();

    if(obj == ggTButton){
      ausgabeText = ""+Mathematik.ggT(eingabeWertA,eingabeWertB);
    }
    if(obj == kgVButton){
      ausgabeText = ""+Mathematik.kgV(eingabeWertA,eingabeWertB);
    }

    ausgabeFeld.setText(ausgabeText);
  }
  // Ende Ereignisprozeduren

  public static void main (String[] args) {
    new RechnerGUI("Rechner");
  }
}
zu 20.4 Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2004