Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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....
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
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
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
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?
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:
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.