# Menü



## siroFranz (24. Jan 2007)

Versteh den Fehler hier absolut nicht  :shock:  :shock: . Hab keine Lust das für jeden Eintrag einzelnd hinzuschreiben, deswegen hab ich da ne for-Schleife eingebaut, aber irgendwie klappt das mit dem Array nicht.


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

public class Editor extends JFrame implements ActionListener
{
    JPanel panel    = new JPanel();
    JMenuBar menueLeiste = new JMenuBar();
    String[] menue = {"Datei", "Bearbeiten", "Ansicht", "Einfügen", "Format", "Tabelle", "Fenster"};
    int i;
    
    public Editor()
    {
        this.setSize(500, 500);
        this.setTitle("Editor");
        this.panel.setLayout(null);
        Container cp = this.getContentPane();
        cp.add(this.panel);
        this.setVisible(true);
    }
    public void actionPerformed(ActionEvent e)
    {
    }
    public static void main (String[] args)
    {
        new Editor();
    }
    public void createMenu()
    {      
        for(i=0; i<=menue.length; i++)
        {
            JMenu menue[i] = new JMenu(menue[i]);
            menueLeiste.add(menue[i]);
        }
        this.setJMenuBar(menueLeiste);
    }
}
```


----------



## The_S (24. Jan 2007)

Du musst createMenu natürlich auch noch aufrufen ...


----------



## André Uhres (24. Jan 2007)

```
...
public class Editor extends JFrame implements ActionListener {
...
    String[] menueText = {"Datei", "Bearbeiten", "Ansicht", "Einfügen", "Format", "Tabelle", "Fenster"};
...
    public Editor() {
...
        createMenu();
        this.setVisible(true);
    }
...
    public void createMenu() {
        for(i = 0; i < menueText.length; i++) {
            JMenu menue = new JMenu(menueText[i]);
            menueLeiste.add(menue);
        }
        this.setJMenuBar(menueLeiste);
    }
}
```


----------



## siroFranz (24. Jan 2007)

Fehlermeldung : array required but javax.swing.JMenu found


----------



## André Uhres (24. Jan 2007)

```
/*
 * Editor.java
 *
 * Created on 24 janvier 2007, 08:35
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package menu;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Editor extends JFrame implements ActionListener {
    JPanel panel    = new JPanel();
    JMenuBar menueLeiste = new JMenuBar();
    String[] menueText = {"Datei", "Bearbeiten", "Ansicht", "Einfügen", "Format", "Tabelle", "Fenster"};
    int i;
    
    public Editor() {
        this.setSize(500, 500);
        this.setTitle("Editor");
        this.panel.setLayout(null);
        Container cp = this.getContentPane();
        cp.add(this.panel);
        createMenu();
        this.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
    }
    public static void main(String[] args) {
        new Editor();
    }
    public void createMenu() {
        for(i=0; i < menueText.length; i++) {
            JMenu menue = new JMenu(menueText[i]);
            menueLeiste.add(menue);
        }
        this.setJMenuBar(menueLeiste);
    }
}
```


----------



## siroFranz (24. Jan 2007)

jetztz kommt die Meldung: ArrayIndexOutOfBoundsException

aber möchte irgendwie, dass der das so ähnlich macht.....


```
public void createMenu()
    {    
        int i;
        
        for(i=0; i<=menue.length; i++)
        {
             JMenu menue[i] = new JMenu(menue[i]);
             menueLeiste.add(menu);
        }
        this.setJMenuBar(menueLeiste);
    }
```

Also dass jedes JMenu auch einen eigenen Namen hat ?

Gruß


----------



## JPKI (24. Jan 2007)

Probiers mal ohne Gleichheitszeichen, dann bei Arrays (müsstest du eigentlich wissen) wird ab 0 gezählt 


```
for (i=0; i < menue.length; i++)
...
```

Alles Klar?


----------



## siroFranz (24. Jan 2007)

kommt aber hierdrauf an:

JMenu menue_  =new JMenu(menue);_


----------



## JPKI (24. Jan 2007)

Wieso? Die ArrayIndexOutOfBoundsException wird doch dadurch verursacht, dass der Index, der zuletzt aufgerufen wird, nicht vorhanden ist (weil eins zu groß).

Naja, ich gestehe, dass ich auch noch nie so ne komische Konstruktion gesehen hab wie


```
JMenu menue[i] = new JMenu(menue[i]);
```
 ;-)


----------



## André Uhres (24. Jan 2007)

siroFranz hat gesagt.:
			
		

> kommt aber hierdrauf an:
> 
> JMenu menue_  =new JMenu(menue);_


_
Das macht man so:


		Code:In die Zwischenablage kopieren


JMenu menue = new JMenu(menueText[i]);

_


----------



## siroFranz (24. Jan 2007)

Aber dann kann die eintraege später gar nicht richtig ansprechen, höchstens mit actionCommand
Hab ja dann nicht für jeden JMenu einen Namen, kann man das nicht irgendwie mit dem Array machen ?

Gruß


----------



## André Uhres (24. Jan 2007)

Versuch's mal so: http://www.java-forum.org/de/viewtopic.php?p=259345#259345


----------



## André Uhres (24. Jan 2007)

Versuch's mal so: http://www.java-forum.org/de/viewtopic.php?p=259345#259345


----------



## siroFranz (24. Jan 2007)

hab jetzt das erwartete Problem, da alle JMenu Einträge gleich heißen, fügt der bei jedem die gleichen JMenuItems ein :roll:  :roll: 
Die JMenuItems 
	
	
	
	





```
String[] datei     = {"Neu", "Öffnen", "Speichern", "Speichern unter", "Drucken", "Beenden"};
```


```
public void createMenu()
    {    
        int i;
        int j;
        for(i=0; i<menue.length; i++)
        {
           JMenu menu  =new JMenu(menue[i]);
           menueLeiste.add(menu);
           for(j=0; j<datei.length; j++)
           {
               menu.add(datei[j]);
           }
        }
        this.setJMenuBar(menueLeiste);
    }
```


----------



## André Uhres (24. Jan 2007)

Versuch's mal so:

```
public void createMenu() {
        for(i=0; i < datei.length; i++) {
            JMenu menu = new JMenu(datei[i]);
            menueLeiste.add(menu);
        }
        this.setJMenuBar(menueLeiste);
    }
```


----------



## siroFranz (24. Jan 2007)

lol will die Items nicht als JMenu  :bahnhof:  :bahnhof: 
die sollen ja bei "Datei" rein aber wie gesagt, setzt der die dann bei allen, weil die JMenu einträge gleichheißen. :meld:
Irgendwie muss ich denen die Namen aus dem Array zuweißen, aber wie? 

Gruß


----------



## JPKI (24. Jan 2007)

Vielleicht mit einem zweidimensionalen Object-Array??


```
String datei[] = {/* Was du halt so brauchen tust*/};
Object menu[][] = new Object[/*Mit den benötigten Werten initialisieren*/][];

for (/*Inhalt der for-Schleife*/) {

 menu[i] = { datei[i], new JMenu[i] };
}
```

So ungefähr meinich das...


----------



## siroFranz (24. Jan 2007)

nö kriegs nicht auf die Reihe:?:  :?:


----------



## André Uhres (24. Jan 2007)

Sry, hab nicht gesehen, daß du dein Menü Löffelweise servierst  :lol: 
Wir sind ja schon bei der Nachspeise  :lol: 

```
package menu;
/*
 * Editor.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Editor extends JFrame implements ActionListener {
    JPanel panel    = new JPanel();
    JMenuBar menueLeiste = new JMenuBar();
    String[] menueText = {"Datei", "Bearbeiten", "Ansicht", "Einfügen", "Format", "Tabelle", "Fenster"};
    String[][] items     = {{"Neu", "Öffnen", "Speichern", "Speichern unter", "Drucken", "Beenden"}, {}, {}, {}, {}, {}, {}};
    int i;
    public Editor() {
        this.setSize(500, 500);
        this.setTitle("Editor");
        this.panel.setLayout(null);
        Container cp = this.getContentPane();
        cp.add(this.panel);
        createMenu();
        this.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
    }
    public static void main(String[] args) {
        new Editor();
    }
    public void createMenu() {
        for(i=0; i < menueText.length; i++) {
            JMenu menu = new JMenu(menueText[i]);
            for (int j = 0; j < items[i].length; j++) {
                JMenuItem mi = new JMenuItem(items[i][j]);
                menu.add(mi);
            }
            menueLeiste.add(menu);
        }
        this.setJMenuBar(menueLeiste);
    }
}
```


----------



## siroFranz (24. Jan 2007)

nicht von schlechten eltern, aber kannste das mal kurz erklären?


----------



## André Uhres (24. Jan 2007)

Ist doch ganz einfach.
"items" ist ja wohl klar: ein 2D Array mit den Items pro Menü.
Wir durchlaufen "menueText"  und erzeugen ein JMenu mit "menueText_", müsste auch klar sein.
Dann durchlaufen wir "items", das heisst alle Items des entsprechenden Menüs, ist auch net kompliziert.
Danach erzeugen wir ein JMenuItem für das Menü mit "items[j]", auch ganz logisch.
Die Items des Menüs werden dem Menü hinzugefügt mit "menu.add(mi);"_


----------



## siroFranz (24. Jan 2007)

thx
ja klar hab das mit dem 2dimensionalen array erst nicht verstanden, bin ja noch nicht lange hier  

Gruß


----------



## siroFranz (24. Jan 2007)

nochmal kruze frage also dass geht gar nicht, dass man den Einträgen einzelne Name aus nem Array zuordnet ?

```
JMenu menue[i] = new JMenu(menue[i]);
```

Gruß


----------



## André Uhres (25. Jan 2007)

siroFranz hat gesagt.:
			
		

> nochmal kruze frage also dass geht gar nicht, dass man den Einträgen einzelne Name aus nem Array zuordnet ?
> 
> ```
> JMenu menue[i] = new JMenu(menue[i]);
> ...


Mit dieser Zuordnung komm ich überhaupt nicht klar.
Der Stringarray "menue[]" kann ja auch nicht gleichzeitig ein JMenu sein.


----------



## siroFranz (25. Jan 2007)

wie ordne ich den einträgen den einzelne Namen aus irgendeinem Array-Typ zu?


----------



## André Uhres (25. Jan 2007)

So?

```
eintrag137.setText(menue[136]);
```


----------



## siroFranz (25. Jan 2007)

versteh das zwar gerade gar nicht, aber erstmal ne wichtige sache  :lol:  :lol: 
Mein Menü sieht so echt "scheiße" aus !!
Wenn ich die Schleife bei setMenu()  mit dem "int e" weglasse, läuft es wieder, aber hab dann immer noch keine Bilder drin. Achja und man muss dann noch das 
	
	
	
	





```
, new ImageIcon(icons[i][e]));
```
 weglassen. 


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

public class Editor extends JFrame implements ActionListener
{
    JPanel panel              = new JPanel();
    JMenuBar menueLeiste      = new JMenuBar();  
    JMenu menu;
    JMenuItem item;
    JButton button;
    JToolBar toolBarOne       = new JToolBar();
    JToolBar toolBarTwo       = new JToolBar();
    JEditorPane textfeld      = new JEditorPane();
    JScrollPane scroller      = new JScrollPane(textfeld, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    String[ ] menue           = {"Datei", "Bearbeiten", "Ansicht", "Einfügen", "Format", "Tabelle", "Fenster"};    
    String[ ][ ] items        = {
                                  {"Neu", "Öffnen", "Speichern", "Speichern unter", "Drucken", "Beenden"},
                                  {"Kopieren", "Einfügen", "Ausschneiden", "Alles markieren"},
                                  {"Vorschau", "Zoom +", "Zoom -"},
                                  {"Hyperlink", "Grafik"},
                                  {"Schriftgröße", "Schriftart"},
                                  {"Einfügen"},
                                  {"Neues Fenster"},
                                };
    String[ ][ ] icons        = {
                                  {"img/neuesDokument.jpg", "img/oeffnen.jpg", "img/speichern.jpg", " ", "image/drucken.jpg", " "},
                                  {"img/kopieren.jpg", "img/einfuegen", "img/ausschneiden", " "},
                                  {"img/vorschau.jpg", "img/plus", "img/minus"},
                                  {"img/hyperlink/jpg", "img/grafik.jpg"},
                                  {" ", " "},
                                  {"img/tabelle.jpg"},
                                  {"img/fenster.jpg"},
                                };
    String[ ][ ] buttonBar    = {
                                  {"img/neuesDokument.jpg", "img/oeffnen.jpg", "img/speichern.jpg", "img/drucken.jpg", "img/kopieren.jpg", "img/einfuegen.jpg", "img/ausschneiden.jpg", "img/hyperlink.jpg", "img/grafik.jpg", "img/tabelle.jpg"},
                                  {"img/bold.jpg", "img/kursiv.jpg", "img/unterstrichen.jpg"},
                                  {"Neues Dokument", "Öffnen", "Speichern", "Drucken", "Kopieren", "Einfügen", "Ausschneiden", "Hyperlink", "Grafik", "Tabelle"},
                                  {"Fett", "Kursiv", "Unterstrichen"},
                                };  
    
    public Editor()
    {
        this.setSize(500, 500);
        this.setTitle("Editor");
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.panel.setLayout(null);
        Container cp = this.getContentPane();
        cp.add(this.panel);
        this.panel.add(this.toolBarOne);
        this.panel.add(this.toolBarTwo);
        this.panel.add(this.scroller);
        this.toolBarOne.setBounds(5, 5, 300, 30);
        this.toolBarTwo.setBounds(200, 40, 300, 30);
        this.scroller.setBounds(5, 75, 485, 375);
        this.setMenu();
        this.setToolBar();
        this.setVisible(true);
    }
    
    public static void main (String[] args)
    {
        Editor editor = new Editor();
    }
    //---------------------------------------------------------------------------------Menue
    public void setMenu()
    {
        for(int i=0; i<this.menue.length; i++)
        {
           this.menu = new JMenu(this.menue[i]);
                for(int j=0; j<this.items[i].length; j++)
                {
                    for(int e=0; e<this.icons[i].length; e++)
                    {
                    this.item = new JMenuItem(this.items[i][j], new ImageIcon(icons[i][e]));
                        if(this.items[i][j] == this.items[0][0])
                        {
                            this.item.setAccelerator(KeyStroke.getKeyStroke('N', Event.ALT_MASK));
                        }
                        if(this.items[i][j] == this.items[0][2])
                        {
                            this.menu.addSeparator();
                        }
                        if(this.items[i][j] == this.items[0][4])
                        {
                            this.menu.addSeparator();
                        }
                        if(this.items[i][j] == this.items[0][5])
                        {
                            this.menu.addSeparator();
                        }
                        if(this.items[i][j] == this.items[1][3])
                        {
                            this.menu.addSeparator();
                        }
                        if(this.items[i][j] == this.items[2][1])
                        {
                            this.menu.addSeparator();
                        }
                        if(this.items[i][j] == this.items[3][1])
                        {
                            this.menu.addSeparator();
                        }
                        if(this.items[i][j] == this.items[4][1])
                        {
                            this.menu.addSeparator();
                        }
                    this.item.addActionListener(this);
                    this.menu.add(this.item);   
                }
            }
                this.menueLeiste.add(menu);
         }
         this.setJMenuBar(this.menueLeiste);
     }
    //---------------------------------------------------------------------------------ToolBar 
     public void setToolBar()
     {
         for(int k=0; k<this.buttonBar[0].length && k<this.buttonBar[2].length; k++)
         {
             this.toolBarOne.add(this.button = new JButton(new ImageIcon(this.buttonBar[0][k])));
             this.button.setToolTipText(this.buttonBar[2][k]);
         }
         for(int l=0; l<this.buttonBar[1].length && l<this.buttonBar[3].length; l++)
         {
             this.toolBarTwo.add(this.button = new JButton(new ImageIcon(this.buttonBar[1][l])));
             this.button.setToolTipText(this.buttonBar[3][l]);
         }
     }
   //----------------------------------------------------------------------------------ActionEvents  
    public void actionPerformed(ActionEvent e)
    {
        if(e.getActionCommand().equals("Neu"))
        {
            this.textfeld.setText("Neues Dokument öffnen ?");
        }
    }            
}
```
  [/code]


----------



## André Uhres (25. Jan 2007)

```
public void setMenu() {
        for(int i=0; i<this.menue.length; i++) {
            this.menu = new JMenu(this.menue[i]);
            for(int j=0; j<this.items[i].length; j++) {
//                for(int e=0; e<this.icons[i].length; e++) {
                this.item = new JMenuItem(this.items[i][j], new ImageIcon(icons[i][j]));
...
//                }
            }
            this.menueLeiste.add(menu);
        }
        this.setJMenuBar(this.menueLeiste);
    }
```


----------



## siroFranz (25. Jan 2007)

die ganzen Schleifen machen mich noch kirre, aber hätte doch theoretisch auch mit der klappen können?


----------



## André Uhres (25. Jan 2007)

siroFranz hat gesagt.:
			
		

> die ganzen Schleifen machen mich noch kirre, aber hätte doch theoretisch auch mit der klappen können?


Nein, wozu drei Schleifen? Sind ja nur zwei Ebenen: Menü und Items.


----------



## siroFranz (25. Jan 2007)

ja ok hast ja recht, aber möglich isset bestimmt    

Gruß


----------



## André Uhres (25. Jan 2007)

siroFranz hat gesagt.:
			
		

> ja ok hast ja recht, aber möglich isset bestimmt
> 
> Gruß


Ja, sicher, man kann auch über Peking nach Madrid fliegen, kein Problem..


----------

