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 );
}
}