Menüleiste erstellen

Dann sind bei dir jetzt Open und Close die variablen? Wenn nicht dann dreh ich noch durch:eek:

Moin,

ja, na sicher, was denn sonst :confused::D
Variablen vom Typ "JMenuItem" ...

Genauso deklarierst Du doch auch Deine eine Variable "menuItem" (!)

Und mit "Open" und "Close" kann Du jetzt alles Mögliche anstellen ... bspw. eben den ActionListerner dranhängen !!

Gruß
Klaus
 
Java:
 menu edit = new JMenu("Bearbeiten");
Wenn ich dies so mache, dann unterstreicht er immer menu und gibt "menu cannot be resolved to a type" aus. Ich muss am Anfang des Codes noch ne Zeile einfügen oder? Bzw. wenn ich wie du JMenu edit... mache, dann unterstreicht er edit gelb.
 
java Code:
menu edit = new JMenu("Bearbeiten");



Wenn ich dies so mache, dann unterstreicht er immer menu und gibt "menu cannot be resolved to a type" aus. Ich muss am Anfang des Codes noch ne Zeile einfügen oder? Bzw. wenn ich wie du JMenu edit... mache, dann unterstreicht er edit gelb.

Das ist doch auch klar :eek:
Der Typ 'menu' ist nicht gleich 'JMenu' (!)

Richtig ist es so:
Java:
jMenu edit = new JMenu("Bearbeiten");

// oder, falls Du einen eigene Klasse 'menu' hast
menu edit = new menu("Bearbeiten");

Ich möchte Dir ja nicht zu nahe treten, aber vlt. solltest Du Dich erstmal mit den Grundlagen der Java-Programmierung vertraut machen :rolleyes:

So finde ich diese Seite sehr anschaulich, wenngleich auch schon etwas älter ...
http://www.dpunkt.de/java/index.html

Gruß
Klaus
 
Das hab ich jetzt im Prinzip schon verstanden, problem jetzt ist nur, sobald ich die variable hinzufüge, und dann noch den action listener, dann verschieben sich meine Menüeinträge immer. Dann verschwindet plötzlich der ganz linke Menüpunkt, und dem seine menuItems werden zum nächsten Menüpunkt hinzugefügt:confused:
edit: Habe mal weiter rumprobiert
Folgenden Code habe ich jetzt
Java:
JMenu MenuePkt2 = new JMenu("Bearbeiten");
	
	menu.getAccessibleContext().setAccessibleDescription(
	        "The only menu in this program that has menu items");
	menuBar.add(menu);

	
JMenuItem adde = new JMenuItem("Mitarbeiter hinzufügen",
	                         new ImageIcon("images/ico_add.png"));
MenuePkt2.add( adde );
adde.addActionListener(this);
Er gibt keinerlei Fehler mehr aus, doch er startet nicht mehr?

Exception in thread "main" java.lang.NullPointerException
at com.six.calendar.pr.MainCalendarFrame.<init>(MainCalendarFrame.java:52)
at com.six.calendar.UCal.main(UCal.java:11)
 
Zuletzt bearbeitet:
Dann machst Du was falsch ... ;)
Lässt sich aber ohne Code nicht analysieren ;-]

Hier nochmal mein (leicht überarbeitetes) Eingangsbeispiel:

java Code:
public class AppMenue implements ActionListener

{

JTextArea Textbereich = null;

AppFenster AppWindow = null;



/** Festlegen der MenüPunkte */

public AppMenue( AppFenster Window, JTextArea text )

{

Textbereich = text;

AppWindow = Window;



JMenuBar Menueleiste = new JMenuBar();



// ### erstes Menü "Datei" erzeugen ###

JMenu Menue1 = new JMenu( "Datei" );



// --- Menüpunkt "Öffnen" erzeugen

JMenuItem Open = new JMenuItem( "Öffnen" );

Menue1.add( Open );

Open.addActionListener(this);



// --- Menüpunkt "Beenden" erzeugen

JMenuItem Close = new JMenuItem( "Beenden" );

Menue1.add( Close );

Close.addActionListener(this);



// ### zweites Menü "Test-Daten einlesen" erzeugen ###

JMenu Menue2 = new JMenu( "Test-Daten einlesen" );



JMenuItem DatenLesen = new JMenuItem( "Get It!" );

Menue2.add( DatenLesen );

DatenLesen.addActionListener( this );



// ...



Menueleiste.add( Menue1 );

Menueleiste.add( Menue2 );

} /* AppMenue() */





/** Abhandeln der MenüEvents */

public void actionPerformed( ActionEvent evt )

{

// das auslösende Objekt ermitteln

if( evt.getSource() instanceof JMenuItem )

{

// den auslösenden Menüpunkt ermitteln und anschließend entspr. reagieren

String MenueEintrag = evt.getActionCommand();



// ##### Menü-1 "Datei" #####

/* ******************** */

/* Programm beenden */

/* ******************** */

if( MenueEintrag.equals("Beenden") ) // vgl. oben "JMenuItem Close = new JMenuItem( "Beenden" );"

{

String msg = new String( "Möchten Sie das Programm beenden ?" );

int retVal = JOptionPane.showConfirmDialog( AppWindow, msg, "Beenden",

JOptionPane.YES_NO_OPTION);

if( retVal == JOptionPane.YES_OPTION )

{

System.exit(0);

}

} /* if */

// ...

} /* if */

} /* actionPerformed() */

} /* class AppMenue */




Du hast immer zu einem JMenu n JMenuItems(!)
Diese musst Du dann im "actionPerformed" auch einzeln abhandeln !

Gruß
Klaus

[EDIT:] Sorry, hier haben sich wohl die Code-Tags bei9m Einfügen verflüchtigt .... :-(
 
Zuletzt bearbeitet:
Momentchen mal.. irgendwie treten wir hier so mehr oder weniger auf der Stelle herum. Mach am besten mal so in etwa folgendes:

Code:
Klasse {

    JMenuBar menuBar;
    JMenu menu1;
    JMenuItem menu1item1;
    JMenuItem menu1item2;
    JMenu menu2;
    JMenuItem menu2item1;

    konstruktor {
        menuBar = new JMenuBar();
        menu1 = new JMenu();
        menu1item1 = new JMenuItem("Item 1");
        menu1item1.addActionListener(new ActionListener {
            public void actionPerformed(ActionEvent ae) {
                // tu was
            }
         });

         // ... was ähnliches für Item 2

         menu1.add(menu1item1);
         menuBar.add(menu1);

         // ... und das ganze für Menu 2 usw.
    }
}

Wenn du jedes Item genau einem Menu zuordnest, kann sich da eigentlich nichts verschieben. Probier's mal nach dem Schema aus und informiere uns ob's funktioniert - und wenn nicht, Code mitposten!
 
@Tim Bureck
Thx, werde ich später nochmal ausporbieren, wenn mein jetziger Versuch nicht mehr klappt:)
Ich habe nun jedem Menüpunkt eine Variable zugewiesen und jedem MenuItem. Anschließend habe ich jedem Menü die passenden MenuItems zugewiesen. Folgendermaßen sieht mein Code nun aus
Java:
ackage com.six.calendar.pr;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;


@SuppressWarnings("serial")
public class MainCalendarFrame extends JFrame  {
	public MainCalendarFrame() {
		super("TeamCal Plus");
	}
	
	public void init() {
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		//getContentPane().setLayout(new BorderLayout());
		JDesktopPane content = new JDesktopPane();
		setContentPane(content);
		//getContentPane().add(content, BorderLayout.CENTER);
		MitarbeiterPanel maPanel = new MitarbeiterPanel();
		maPanel.init();
		JInternalFrame maFrame = new JInternalFrame("Mitarbeiter", true, true, true, true);
		maFrame.getContentPane().setLayout(new BorderLayout());
		maFrame.getContentPane().add(maPanel, BorderLayout.CENTER);
		maFrame.setSize(200, 300);
		maFrame.setVisible(true);
		content.add(maFrame);
	}
	
	JMenuBar menuBar;
	JMenu menu, submenu;
	JMenuItem menuItem;
	JRadioButtonMenuItem rbMenuItem;
	JCheckBoxMenuItem cbMenuItem;
	
	{
		
	menuBar = new JMenuBar();

JMenu MenuePkt1 = new JMenu("TeamCal Plus");
	
	menu.getAccessibleContext().setAccessibleDescription(
	        "");
	menuBar.add(menu);
	
	JMenuItem login = new JMenuItem("Anmelden",
            new ImageIcon("images/login.png"));
	MenuePkt1.add( login );
	
menu.add(menuItem);
	
	JMenu MenuePkt2 = new JMenu("Bearbeiten");
	
	menu.getAccessibleContext().setAccessibleDescription(
	        "The only menu in this program that has menu items");
	menuBar.add(menu);

	
	JMenuItem adde = new JMenuItem("Mitarbeiter hinzufügen",
	                         new ImageIcon("images/ico_add.png"));
	MenuePkt2.add( adde );
	

	menu.add(menuItem);
	menu.addSeparator();

JMenuItem edit = new JMenuItem("Mitarbeiter bearbeiten",
            new ImageIcon("images/tools.jpg"));
MenuePkt2.add( edit );

	menu.add(menuItem);
	menu.addSeparator();
	JMenuItem delete = new JMenuItem("Mitarbeiter löschen",
            new ImageIcon("images/delete.jpg"));
	MenuePkt2.add( delete );
	
	menu.add(menuItem);

	this.setJMenuBar(menuBar);
	
	JMenu MenuePkt3 = new JMenu("Ansicht");
	menu.getAccessibleContext().setAccessibleDescription(
	        "");
	menuBar.add(menu);
	JMenuItem cal = new JMenuItem("Kalender",
            new ImageIcon("images/kalender.png"));
	MenuePkt3.add( cal );
	
menu.add(menuItem);
menu.addSeparator();
JMenuItem yearcal = new JMenuItem("Jahreskalender",
        new ImageIcon("images/jahreskalender.png"));
MenuePkt3.add( yearcal );

menu.add(menuItem);
menu.addSeparator();
JMenuItem stat = new JMenuItem("Statistik",
        new ImageIcon("images/statistik.png"));
MenuePkt3.add( stat );

menu.add(menuItem);

JMenu MenuePkt4 = new JMenu("Optionen");
menu.getAccessibleContext().setAccessibleDescription(
        "");
menuBar.add(menu);

JMenuItem user = new JMenuItem("Nutzer",
        new ImageIcon("images/nutzer.png"));
MenuePkt4.add( user );

menu.add(menuItem);
menu.addSeparator();
JMenuItem groups = new JMenuItem("Gruppen",
        new ImageIcon("images/gruppen.png"));
MenuePkt4.add( groups );

menu.add(menuItem);
menu.addSeparator();
JMenuItem groupmapping  = new JMenuItem("Gruppenzuordnung",
        new ImageIcon("images/gruppenzuordnung.png"));
MenuePkt4.add( groupmapping );

menu.add(menuItem);
menu.addSeparator();
JMenuItem types = new JMenuItem("Abwesenheitstypen",
        new ImageIcon("images/abwesenheitstypen.png"));
MenuePkt4.add( types );

menu.add(menuItem);
menu.addSeparator();
JMenuItem holidays = new JMenuItem("Feiertage",
        new ImageIcon("images/feiertage.png"));
MenuePkt4.add( holidays );

menu.add(menuItem);
menu.addSeparator();
JMenuItem database = new JMenuItem("Datenbank Verwaltung",
        new ImageIcon("images/datenbankverwaltung.png"));
MenuePkt4.add( database );

menu.add(menuItem);

JMenu MenuePkt5 = new JMenu("TeamCal Plus");

menu.getAccessibleContext().setAccessibleDescription(
        "");
menuBar.add(menu);

JMenuItem about = new JMenuItem("Über",
        new ImageIcon("images/datenbankverwaltung.png"));
MenuePkt5.add(about);
menu.add(menuItem);

menu.add(menuItem);
	}
Fehler gibt er keinerlei aus, doch er startet nicht mehr, wie gestern bereits:confused:
 
Moin,

nein, Du hast es noch immer nicht richtig verstanden ! :(

Ich werde nochmals versuchen es anhand Deiner Zeilen 49-59 zu verdeutlichen:

Java:
// hier erzeugst Du das Objekt der Menüleiste - soweit ok!
menuBar = new JMenuBar();

// nun erzeugst Du einen neuen Menüpunkt für die Leiste - soweit ok!
JMenu MenuePkt1 = new JMenu("TeamCal Plus");

// So - nun fügst aber nicht diesen neuen Menüpunkt hinzu, 
// sondern ein anderes zuvor deklariertes Menü ! ! !
// menuBar.add(menu); // ?
// Richtig wäre hier:
menuBar.add(MenuePkt1);

// nun erzeugst Du einen neuen Eintrag für das Menü1 - soweit ok!
JMenuItem login = new JMenuItem( "Anmelden",new ImageIcon("http://www.tutorials.de/forum/images/login.png") );

// hier wird der neue Eintrag korrekt dem Menü1 hinzugefügt!
MenuePkt1.add( login );
   
// dies ist wieder Blödsinn, da es 'menu' gar nicht gibt!
menu.add(menuItem);

Zudem sind Diene Deklarationen in den Zeilen 40/41 völlig überflüssig, da Du ja die richtigen VAR ab Zeile 49 erzeugst!

Schau Dir nochmals die von mir und Tim Bureck geposteten Beispiel genau an und schau, welche Objekte erzeugt werden und was genau damit veranstaltet wird ;)

Und nimm' meinen zuvor geposteten Tipp ernst und beschäftige Dich mit den Grundlagen (Du musst wirklich drauf achten, welche Objekte Du brauchst und was Du wo hinzufügen willst!) :
http://www.dpunkt.de/java/index.html

Ich habe meine erstes Java-Menü auch erst vor ca. 9 Monaten gebastelt und mich damit beschäftigen müssen ;-]:p

Gruß
Klaus
 
Zuletzt bearbeitet:
// dies ist wieder Blödsinn, da es 'menu' gar nicht gibt!
menu.add(menuItem);
Stimmt, weil wir nur MenuePkt1 usw. haben? Sollte ich das menu also durch MenuPkt1, MenuPkt2 usw. ersetzen? Dann wäre es ja aber doppelt, weil die zeile darüber die gleiche ist.
Ich werde mir das noch durchlesen, vielen Dank für den Tipp:)
 
Stimmt, weil wir nur MenuePkt1 usw. haben?

Sollte ich das menu also durch MenuPkt1, MenuPkt2 usw. ersetzen? Dann wäre es ja aber doppelt, weil die zeile darüber die gleiche ist.

naja, auch noch nicht so ganz :rolleyes:

Hier nochmals ein recht abstraktes Beispiel für ein Menü mit 3 Menüpunkte, die dann 3, 2 und 1 Menüeintrag haben:

Java:
// Erzeugen einer Menüleiste
JMenuBar menuBar = new JMenuBar();
 
// Erzeugen von 3 Menüpunkten für die Menüleiste
JMenu MenuePkt1 = new JMenu("Menü-1");
JMenu MenuePkt2 = new JMenu("Menü-2");
JMenu MenuePkt3 = new JMenu("Menü-3");
 
// Erzeugen einzelner Menüpunkte
JMenuItem item1_Menu1 = new JMenuItem( "Item-1 M1" );
JMenuItem item2_Menu1 = new JMenuItem( "Item-2 M1" );
JMenuItem item3_Menu1 = new JMenuItem( "Item-3 M1" );

JMenuItem item1_Menu2 = new JMenuItem( "Item-1 M2" );
JMenuItem item2_Menu2 = new JMenuItem( "Item-2 M2" );

JMenuItem item1_Menu3 = new JMenuItem( "Item-1 M3" );
 
// die neuen Einträge den jeweiligen Menüs hinzufügen!
MenuePkt1.add( item1_Menu1 );
MenuePkt1.add( item2_Menu1 );
MenuePkt1.add( item3_Menu1 );

MenuePkt2.add( item1_Menu2 );
MenuePkt2.add( item2_Menu2 );

MenuePkt3.add( item1_Menu3 );
   
// Hinzufügen der 3 Menüpunkte zur Menüleiste
menuBar.add( MenuePkt1 );
menuBar.add( MenuePkt2 );
menuBar.add( MenuePkt3 );

// TODO das Hinzufügen der Menüleiste zu Deinem Projekt ...
MEIN_OBJEKT.add( menuBar );

Mehr musst Du wirklich nicht machen !!
Keine weiteren Deklarationen etc. ;)

Gruß
Klaus
 

Neue Beiträge

Zurück