Menü

Status
Nicht offen für weitere Antworten.

siroFranz

Bekanntes Mitglied
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.

Code:
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);
    }
}
 
Code:
...
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);
    }
}
 
Code:
/*
 * 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);
    }
}
 
jetztz kommt die Meldung: ArrayIndexOutOfBoundsException

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

Code:
 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ß
 
Probiers mal ohne Gleichheitszeichen, dann bei Arrays (müsstest du eigentlich wissen) wird ab 0 gezählt 😛

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

Alles Klar?
 
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

Code:
JMenu menue[i] = new JMenu(menue[i]);
;-) 😛
 
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ß
 
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
Code:
 String[] datei     = {"Neu", "Öffnen", "Speichern", "Speichern unter", "Drucken", "Beenden"};
Code:
  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);
    }
 
Versuch's mal so:
Code:
   public void createMenu() {
        for(i=0; i < datei.length; i++) {
            JMenu menu = new JMenu(datei[i]);
            menueLeiste.add(menu);
        }
        this.setJMenuBar(menueLeiste);
    }
 
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ß
 
Vielleicht mit einem zweidimensionalen Object-Array??

Code:
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...
 
Sry, hab nicht gesehen, daß du dein Menü Löffelweise servierst :lol:
Wir sind ja schon bei der Nachspeise :lol:
Code:
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);
    }
}
 
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);"
 
nochmal kruze frage also dass geht gar nicht, dass man den Einträgen einzelne Name aus nem Array zuordnet ?
Code:
JMenu menue[i] = new JMenu(menue[i]);

Gruß
 
siroFranz hat gesagt.:
nochmal kruze frage also dass geht gar nicht, dass man den Einträgen einzelne Name aus nem Array zuordnet ?
Code:
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.
 
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
Code:
, new ImageIcon(icons[i][e]));
weglassen.

Code:
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]
 
Code:
    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);
    }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben