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

// Einfaches Layout, zur Ein- und Ausgaben von Werten
// Verwendet Vertikale und horizontales Layout

public class BoxLayout extends JFrame {


  // Die GUI-Elemente muessen "global" definiert werden"
  // Dann hat man darauf Zugriff in den Methoden
  JTextField _Editzeile;
  JTextArea _Editor;

  //Frame konstruieren
  public BoxLayout() {
    setSize(1000, 700);
    setTitle("Box-Layout");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setGUI();
  } // create


  void setGUI() {
    JLabel LabelZahl;
    JScrollPane Sc;
    JButton BnOk;		// Schalter definieren
    JButton BnEsc;		// Schalter definieren
    Box box1;

      // North
    LabelZahl = new JLabel();
    LabelZahl.setText("N (Maximalwert)");
    LabelZahl.setFont( new Font("Arial", Font.BOLD,28));
    _Editzeile = new JTextField();
    _Editzeile.setFont( new Font("Arial", Font.BOLD,28));
    _Editzeile.setText("10");  // N =10

    box1 = Box.createVerticalBox();
    box1.add(  Box.createVerticalStrut(5) );
    box1.add(LabelZahl);
    box1.add(  Box.createVerticalStrut(5) );
    box1.add(_Editzeile) ;
    box1.add(  Box.createVerticalStrut(30) );
    this.getContentPane().add(box1, BorderLayout.NORTH);

      // Center
    _Editor = new JTextArea();
    _Editor.setFont( new Font("Arial", Font.BOLD,28));
    _Editor.setText("-");
    Sc = new JScrollPane(_Editor);
    getContentPane().add( Sc, BorderLayout.CENTER);

      // South
    // Die Schalter werden in einem JPanel eingefuegt
    JPanel panel1 = new JPanel();
    panel1.setLayout( new FlowLayout() );
	 BnOk = new JButton();  	// Schalter erzeugen
	 BnOk.setText("Ok");  	// Text setzen
     BnOk.setFont( new Font("Arial", Font.BOLD,28));
	 BnEsc= new JButton();  	// Schalter erzeugen
	 BnEsc.setText("Esc");  	// Text setzen
    BnEsc.setFont( new Font("Arial", Font.BOLD,28));
    panel1.add(BnOk);
    panel1.add(BnEsc);
    //Einfuegen des Panels in das Hauptframe
    this.getContentPane().add(panel1, BorderLayout.SOUTH);

    BnOk.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnOk_Click();
      }
    });
    BnEsc.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnEsc_Click();
      }
    });

  }

  void BnOk_Click() {
    long i, n, p;
    String sWert1, sWert2;
      // hole den Wert n
    n = LVal(_Editzeile.getText());
    if (n<0) {
      _Editor.setText("Keine gültige Zahl\nBitte eine gültige Zahl im Bereich 1 bis 20 eingeben");
      return;
    }
    _Editor.setText("");  // Editorinhalt löschen
    if ( n<=20 ) {
      p = 1;
      for (i=1; i<=n; i++) {
        p = p * i;
        _Editor.append(i + " " + p + "\n");
      }
    }
    else {
      _Editor.setText("Bitte eine gültige Zahl im Bereich 1 bis 20 eingeben");
    }
  }  // BnOk_Click


  void BnEsc_Click() {
    System.exit(0);
  }


  // sehr vereinfacht
  public long LVal(String sText) {
        long result =-999;
        try {
            result = Long.valueOf(sText).longValue();
        }
        catch (NumberFormatException e) {
          result = -999;
        }
        return result;
  } // LVal



  

  public static void main(String[] args) {
    BoxLayout frame = new BoxLayout();
    frame.setVisible(true);
  }


}
