Grössere MenuBars realisieren

Status
Nicht offen für weitere Antworten.

schulhaus

Mitglied
Wie realisiert man am besten eine grössere Menubar?

Wäre es eine Möglichkeit über ein Properties-File?
So im Still:
Code:
menu.file.exit=Beenden
menu.about.help=Hilfe
menu.about.about=Über uns
Kennt jemand eine Klasse die das in ein Menu umsetzt? :)

Vielen Dank.

Freundliche Grüsse
 
Zuletzt bearbeitet:
G

Gonzo17

Gast
Du willst durch Einlesen einer properties-Datei eine beliebig große Menübar erstellen lassen?

Ja also theoretisch ist das bestimmt möglich, aber wo ist der Sinn? Dann hast du ne Menübar, bei der die Menüeinträge aber nicht reagieren, wenn du sie anklickst. Denn woher soll aus deinem properties-File denn hervorgehen, welche Aktion hinter jedem Eintrag steht?

Wozu brauchst du das genau? Das ist mir irgendwie nicht klar. Wenn du einfach nur ne große Menübar in dein Progrämmchen einbauen willst, dann gehts mit Sicherheit einfacher als das in ein properties-File auszulagern.
 
B

bygones

Gast
natuerlich kannst du ueber eine Properties alles regeln (Name, Location, Icon, Action)... nur dann haste eine wahr. unuebersichtliche und unklare txt Datei

Hinzu kommt das auslesen und das richtige intepretieren dieser datei....

warum nicht eine simple normale java klasse ?
 

schulhaus

Mitglied
Es geht darum, dass ein Kunde später das Menü selbst bearbeiten können sollte.

Aber ich denke, das dies eine Anforderung ist, die warten kann.

Unübersichtlichkeit wird es geben in dem Textfeld. Natürlich kann ich dies einem Kunden auch nicht zumuten und müsste dazu dann wieder eine UI machen. Mal sehen :)

Vielen Dank für die beiden Antworten :)
 
B

bygones

Gast
ich wuerde komplett davon abraten eine komplette UI (scheint ja nicht nur sich auf MenuBars zu beschraenken) per properties filea zu realiseren... das geht ins unueberschaubare.

Entweder ihr nutzt einen GUI editor und schreibt euch dann einen selber, den der Kunde dann auch nutzen kann
 

schulhaus

Mitglied
ich wuerde komplett davon abraten eine komplette UI (scheint ja nicht nur sich auf MenuBars zu beschraenken) per properties filea zu realiseren... das geht ins unueberschaubare.

Entweder ihr nutzt einen GUI editor und schreibt euch dann einen selber, den der Kunde dann auch nutzen kann

Das würde den Rahmen bei weitem Sprengen. Zwingend schlecht ist es nicht, falls sie was geändert haben wollen, müssen sie wieder zu uns kommen. :)
 

schulhaus

Mitglied
Sitze immer noch an meinem Menü und hätte dazu ein weitere Frage.

Entschuldige, wenn ich hier die Community "missbrauche" für meine (vielen) Fragen.
Ich weiss es sollte ein geben und nehmen sein :(

Dies sieht momentan so aus: (Frage unten)
Java:
		menuFile = new JMenu(language.getString("menu.file"));
		menuFile.add(new JMenuItem(language.getString("menu.file.export")));
		menuFile.add(new JMenuItem(language.getString("menu.file.import")));
		menuFile.add(new JMenuItem(language.getString("menu.file.exit")));
		add(menuFile);
		
		menuProduct = new JMenu(language.getString("menu.product"));
		menuProduct.add(new JMenuItem(language.getString("menu.product.select")));
		menuProduct.add(new JMenuItem(language.getString("menu.product.new")));
		menuProduct.add(new JMenuItem(language.getString("menu.product.print")));
		add(menuProduct);
		
		menuSupplier = new JMenu(language.getString("menu.supplier"));
		menuSupplier.add(new JMenuItem(language.getString("menu.supplier.select")));
		menuSupplier.add(new JMenuItem(language.getString("menu.supplier.new")));
		add(menuSupplier);
		
		menuOrder = new JMenu(language.getString("menu.order"));
		menuOrder.add(new JMenuItem(language.getString("menu.order.select")));
		menuOrder.add(new JMenuItem(language.getString("menu.order.print")));
		add(menuOrder);
		
		menuHelp = new JMenu(language.getString("menu.help"));
		menuHelp.add(new JMenuItem(language.getString("menu.help.about")));
		menuHelp.add(new JMenuItem(language.getString("menu.help.help")));
		add(menuHelp);

Nun müsste ich zu jedem Item noch den passenden Listener hinzufügen. Gibt es eine Möglichkeit alle ItemAktionen auf einmal abzufangen und von deren Namen weiter zu interagieren? Sollte ich das ganze durch Schleifen realisieren? :p

Freundliche Grüsse
 
Zuletzt bearbeitet:

Onkel Hatti

Bekanntes Mitglied
So ganz einfach ist das aus deinem Quellcode nicht.

Es gibt grundsätzlich zwei Methoden:

1. Der anonyme Listener.

Dazu muss deine Klasse das Interface "ActionListener" implementieren.
Dazu gehört dann die Methode
Java:
public void actionPerformed(ActionEvent event)
{
}

in dieser Methode werden die Elemente abgefragt, die den ActionEvent ausgelöst haben. Welches Element das aktuell ist, ist über
Java:
event.getSource()

zu erfahren.
MenuItems lösen einen solchen Event aus und senden ihn an alle Listener. Dazu muss der Listener dem MenuItem natürlich bekannt sein.
Das geht mit
Java:
menuItem.addActionListener(this);

"this" kann man anmelden, weil die Klasse durch das Implementieren des Interface ActionListener halt auch ein ActionListener ist. Alle ActionEvents dieses MenuItems "kommen jetzt in der obigen Methode an".

2. der nicht anonyme Listener

Dazu wird jedem MenuItem ein eigener Listener registriert:
Java:
menuItem.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					//der code ...
				}
			});

der ActionEvent wird an die actionPerformed - Methode innerhalb des ActionListeners geleitet und dort ausgewertet.

Das dumme an deinem Code ist, daß die MenuItems erstellt werden, sie aber, lass mich sagen, für weitere Bearbeitung nicht zur Verfügung stehen...
Java:
        MenuItem exportMI;
        MenuItem importMI;
        MenuItem exitMI;
        menuFile = new JMenu(language.getString("menu.file"));
        menuFile.add(exportMI=new JMenuItem(language.getString("menu.file.export")));
        menuFile.add(importMI=new JMenuItem(language.getString("menu.file.import")));
        menuFile.add(exitMI=new JMenuItem(language.getString("menu.file.exit")));
        exportMI.addActionListner(this);
        importMI.addActionListner(this);
        exitMI.addActionListner(this);
        add(menuFile);

z.B. für Methode 1. wäre ggf. besser.

Hatti

P.S. das beantwortet die Frage nicht... (Alles was jetzt kommt, hab ich nicht selbst getestet, sondern ist aus der API daher gefischt)
OK, ich denke, ja, möglich ist das.
Ansatzpunkt:
JMenuBar.

JMenuBar.getSubElements() liefert ein Array aller MenuElements der JMenuBar.
MenuElement.getSubElements() liefert ein Array aller MenuElements des MenuElements.

Mit einer Schleife kann man sich so durch den ganzen Menübaum hangeln und alle MenuElements herausfinden.

MenuElement.getComponent() liefert die Component des Elements.

Wenn die Componente ein JMenuItem ist - bingo!
Es müsste jetzt ein Cast funktionieren:

JMenuItem menuItem=(JMenuItem)component;

und dann mit

menuItem.addActionListener(this) den Listener bekannt machen.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Spielerbewegungen realisieren Java Basics - Anfänger-Themen 2
A MouseMotionListener - wie Mausverfolgung und Neuzeichnen realisieren? Java Basics - Anfänger-Themen 12
H Frage um Eingbeaufforderung zu realisieren Java Basics - Anfänger-Themen 4
A Wie kann ich folgendes Projekt realisieren? Java Basics - Anfänger-Themen 4
L Methoden Methode mit drei Rückgabewerten realisieren Java Basics - Anfänger-Themen 3
L Schaltung realisieren Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Liste als Array realisieren Java Basics - Anfänger-Themen 23
J Mustererkennung realisieren Java Basics - Anfänger-Themen 10
Y chat programm im internet realisieren Java Basics - Anfänger-Themen 5
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
T 1:1 Beziehungen realisieren ? Java Basics - Anfänger-Themen 13
S Ausgabe realisieren Java Basics - Anfänger-Themen 2
D Java Programm mit Internetzugriff realisieren Java Basics - Anfänger-Themen 8
ARadauer timeout realisieren Java Basics - Anfänger-Themen 5
D Logging sätmlicher Vorgänge, wie am besten realisieren? Java Basics - Anfänger-Themen 6
G Physikalisches Problem realisieren Java Basics - Anfänger-Themen 11
G isEmpty selbst realisieren Java Basics - Anfänger-Themen 47
U Texteditor mit methoden realisieren Java Basics - Anfänger-Themen 13
A Beziehung 1-n in Java realisieren Java Basics - Anfänger-Themen 17
S Zeilenumbrüche realisieren Java Basics - Anfänger-Themen 6
I SaveFile Dialog - wie realisieren ? Java Basics - Anfänger-Themen 4
L Timer Swing realisieren Java Basics - Anfänger-Themen 4
P :shock: teilweises wurzelziehen realisieren Java Basics - Anfänger-Themen 9
R Zeitaufwand für Suchmaschine mit Lucene realisieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben