import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.EmptyBorder;
public class testGebiet extends JFrame implements ActionListener, MouseListener	{
	JFrame frame = new JFrame();
	/*****************************************************************************
	 * Der ButtonZaehler ist ein wichtiger Bestandteil des Programms.
	 * Mehr dazu in der Action-Methode.
	 ****************************************************************************/
	int iButtonZaehler = 0;
	/*****************************************************************************
	 * Ich benutze hier einige selbst erstellte Icons, um das am Ende aufblendende
	 * Menu zu verschönern.
	 ****************************************************************************/
	Icon icnStandard = new ImageIcon( "openMenu_10st.gif" );
	Icon icnRollover = new ImageIcon( "openMenu_10ro.gif" );
	Icon icnPressed = new ImageIcon( "openMenu_10pr.gif" );
	/*****************************************************************************
	 * Die TextArea dient in der Mitte ebenfalls nur zur Zierde.
	 ****************************************************************************/
	JTextArea jtxtrMitte;
	/*****************************************************************************
	 * Der Button jbtnNeu ist der unterste Button zum hinzufügen der Button in die
	 * MenuBar und in das Menu.
	 ****************************************************************************/
	JButton jbtnNeu;
	/*****************************************************************************
	 * Der erste Button ist der erste Button in der MenuBar, der zweite Button
	 * erscheint nach dem ersten in der MenuBar bis das Menu am Ende erscheint,
	 * und der dritte Button fügt sich danach in das Menu ein.
	 ****************************************************************************/
	JButton jbtnBarButton0 = new JButton( "" );
	JButton jbtnBarButton1 = new JButton( "" );
	JButton jbtnBarButton2 = new JButton( "" );
	/*****************************************************************************
	 * Die Bestandteile der MenuBar.
	 ****************************************************************************/
	JMenuBar jmnBar;
	JMenu jmnButtons;
	Container cp = getContentPane();
	public testGebiet()	{
		super( "TestStrecke" );
		setDefaultCloseOperation( EXIT_ON_CLOSE );
	/*****************************************************************************
	 * Das BorderLayout reicht bei diesem Zweckprogramm aus.
	 ****************************************************************************/
		BorderLayout border = new BorderLayout();
		cp.setLayout(  border );
	/*****************************************************************************
	 * Hier wird das Look and Feel auf den Windows-Standard gesetzt
	 ****************************************************************************/
			try {
				UIManager.setLookAndFeel(
				"com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
				SwingUtilities.updateComponentTreeUI( frame );
			}
			catch (Exception e) {
				System.err.println( "Konnte Layout nicht Laden" );
			}
	/*****************************************************************************
	 * Das JMenu wird deklariert. Ich ändere die Größe des Menus, füge ihm einen
	 * MouseListener hinzu und setze die Erscheinung auf mein Icon.
	 ****************************************************************************/
		jmnButtons = new JMenu();
		jmnButtons.setBorder( new EmptyBorder( 0, -4, 0, -4 ) );
		jmnButtons.addMouseListener( this );
		jmnButtons.setIcon( icnStandard );
	/*****************************************************************************
	 * Die MenuBar wird deklariert.
	 ****************************************************************************/
		jmnBar = new JMenuBar();
		setJMenuBar( jmnBar );
	/*****************************************************************************
	 * Das TextArea wird deklariert.
	 ****************************************************************************/
		jtxtrMitte = new JTextArea();
	/*****************************************************************************
	 * Der Button jbtnNeu wird deklariert.
	 ****************************************************************************/
		jbtnNeu = new JButton( "New" );
		jbtnNeu.addActionListener( this );
	/*****************************************************************************
	 * Die TextArea und der Button jbtnNeu werden dem Frame hinzugefügt.
	 ****************************************************************************/
		cp.add( jtxtrMitte, BorderLayout.CENTER );
		cp.add( jbtnNeu, BorderLayout.SOUTH );
	}
	public void actionPerformed( ActionEvent evt )	{
		Object source = evt.getSource();
	/*****************************************************************************
	 * Wenn der Button jbtnNeu geklickt wird...
	 ****************************************************************************/
		if( jbtnNeu == source )	{
	/*****************************************************************************
	 * Wird der ButtonZaehler mit 0 verglichen. Ist er 0, wird der erste Button
	 * der MenuBar hinzugefügt. Der ButtonZaehler wird daraufhin um 1 erhöht.
	 ****************************************************************************/
			if( iButtonZaehler == 0 )	{
				jbtnBarButton0 = new JButton( "JButton0" );
				iButtonZaehler++;
				jmnBar.add( jbtnBarButton0 );
				jmnBar.validate();
			}
	/*****************************************************************************
	 * Sobald der ButtonZaehler nicht mehr 0 ist, wird die Breite des ersten
	 * Buttons und der zweiten Buttons (oben noch als 0 deklariert) addiert,
	 * und die Breite des Menus am Ende addiert und mit der Gesamtbreite der
	 * MenuBar verglichen. Ist die Summe kleiner als die Breite der MenuBar,
	 * wird ein weiterer zweiter Button eingefügt. Beim nächsten klick auf
	 * jbtnNeu, werden die zweiten Buttons mit dem ButtonZaehler multipliziert
	 * und somit die neue Breite der Buttons verglichen.
	 ****************************************************************************/
			else if( jbtnBarButton0.getWidth() + (jbtnBarButton1.getWidth() *
				iButtonZaehler) + 25 < jmnBar.getWidth() )	{
				jbtnBarButton1 = new JButton( "JButton" + iButtonZaehler );
				iButtonZaehler++;
				jmnBar.add( jbtnBarButton1 );
				jmnBar.validate();
			}
	/*****************************************************************************
	 * Ist die Gesamtbreite der Buttons + Menu breiter als die MenuBar, wird das
	 * Menu am Ende der MenuBar eingefügt und folgende Buttons werden vertikal in
	 * dieser eingefügt.
	 ****************************************************************************/
			else	{
				jbtnBarButton2 = new JButton( "JButton" + iButtonZaehler );
				iButtonZaehler++;
				jmnButtons.add( jbtnBarButton2 );
				jmnButtons.validate();
				jmnBar.add( jmnButtons );
				jmnBar.validate();
			}
	/*****************************************************************************
	 * Hier wird bei jedem Klick die Rechnung in der Komandozeile angezeigt.
	 ****************************************************************************/
			System.out.println( "Button0 + (Button1 * iButtonZaehler) + 25 = " );
			System.out.println( jbtnBarButton0.getWidth()  + " + (" + jbtnBarButton1.getWidth() + " * " + iButtonZaehler +  ") " + + 25 + " = " );
			System.out.println( jbtnBarButton0.getWidth() + (jbtnBarButton1.getWidth() * iButtonZaehler) + 25 + " < " + jmnBar.getWidth() );
		}
	}
	/*****************************************************************************
	 * Hier werden die MouseEvents für die Icons auf dem Menu deklariert.
	 ****************************************************************************/
	public void mouseClicked( MouseEvent e ) {
	}
	public void mousePressed( MouseEvent e ) {
		jmnButtons.setIcon( icnPressed );
	}
	public void mouseReleased( MouseEvent e ) {
		jmnButtons.setIcon( icnStandard );
	}
	public void mouseEntered( MouseEvent e ) {
		jmnButtons.setIcon( icnRollover );
	}
	public void mouseExited( MouseEvent e ) {
		jmnButtons.setIcon( icnStandard );
	}
	/*****************************************************************************
	 * Die main-Methode für den Frame.
	 ****************************************************************************/
	public static void main( String[] args )	{
		JFrame frame = new testGebiet();
		frame.setBounds( 460, 360, 340, 200 );
		frame.setResizable( true );
		frame.setVisible( true );
	}
}