Hallo zusammen.
In der Anwendung unserer Firma gibt es (ziemlich oft) Menüleisten mit Menüpunkten, die keine Submenüs haben, sprich wie Buttons (intern vom Typ Action) reagieren.
Da man auf eine JMenuBar nicht direkt Actions legen kann, ist meine Vorgehensweise bisher wie folgt:
- Es gibt "normale" Menüs, sprich ein JMenu welches als Submenüs einige Actions bekommt (völlig unproblematisch )-
- Die Actions, die keine Submenüs haben, sollen direkt auf die Menüleiste. Bisher werden diese als JButton drauf gesetzt.
Das funktioniert im Grunde ganz gut, wenn man dem JButton noch ein paar Eigenschaften verpasst, sodass er wie ein normales JMenu aussieht (wie
).
ABER ... dann kommen die Look&Feels ins Spiel, die z.B. andere MouseOver-Effekte haben oder die Breiten anders berechnen.
Es wäre nun schön, wenn ich diese JButton auf der Menüleiste noch so hinbekommen würde, dass sie sich entspr. dem Look&Feel auch verhalten und aussehen wie JMenus.
Kann mir hier jemand einen Hinweis geben / Hilfe leisten? Ich habe folgende Ansätze schon ausprobiert mit den jeweils genannten Ergebnissen. Vielleicht hat dazu jmd einen Korrekturvorschlag?
Folgende Dinge wurden schon probiert:
1) Direkt JMenuItem auf die JMenuBar legen:
Das geht zwar, aber die MenuItems sehen da sehr schräg aus, viel zu breit und Borders werden teilweise seltsam gezeichnet.
2) ActionListener an JMenu setzen:
Es wird direkt ein JMenu (ohne Submenüs) auf die Leiste gelegt und diesem Menü ein ActionListener verpasst. Mit dem dem Effekt, dass beim Klick auf das Menü nur ein kleines Eckchen zu sehen ist (leeres Popupmenü) und der eigene ActionListener gar nicht anspringt.
3) Dem JButton die MenuUI verpassen:
Man kann ja via
das entsprechende UI vom Look&Feel setzen. Dies schien mir der erfolgreichste Ansatz, aber leider fruchtete etwas wie
nur in einer ClassCastException
Mit den UIs habe ich bisher nichts gemacht und weiß daher auch nicht sicher, wie ich damit umgehen muss, sprich ob es überhaupt möglich ist, nem JButton die UI von einem JMenu zu geben (immerhin erben beide von AbstractButton).
Also soweit mein Problem. Danke schonmal fürs Lesen und Nachdenken
In der Anwendung unserer Firma gibt es (ziemlich oft) Menüleisten mit Menüpunkten, die keine Submenüs haben, sprich wie Buttons (intern vom Typ Action) reagieren.
Da man auf eine JMenuBar nicht direkt Actions legen kann, ist meine Vorgehensweise bisher wie folgt:
- Es gibt "normale" Menüs, sprich ein JMenu welches als Submenüs einige Actions bekommt (völlig unproblematisch )-
- Die Actions, die keine Submenüs haben, sollen direkt auf die Menüleiste. Bisher werden diese als JButton drauf gesetzt.
Das funktioniert im Grunde ganz gut, wenn man dem JButton noch ein paar Eigenschaften verpasst, sodass er wie ein normales JMenu aussieht (wie
Code:
setBorderPainted(false);
ABER ... dann kommen die Look&Feels ins Spiel, die z.B. andere MouseOver-Effekte haben oder die Breiten anders berechnen.
Es wäre nun schön, wenn ich diese JButton auf der Menüleiste noch so hinbekommen würde, dass sie sich entspr. dem Look&Feel auch verhalten und aussehen wie JMenus.
Kann mir hier jemand einen Hinweis geben / Hilfe leisten? Ich habe folgende Ansätze schon ausprobiert mit den jeweils genannten Ergebnissen. Vielleicht hat dazu jmd einen Korrekturvorschlag?
Folgende Dinge wurden schon probiert:
1) Direkt JMenuItem auf die JMenuBar legen:
Java:
myMenuBar.add( new JMenuItem(currentAction) );
2) ActionListener an JMenu setzen:
Es wird direkt ein JMenu (ohne Submenüs) auf die Leiste gelegt und diesem Menü ein ActionListener verpasst. Mit dem dem Effekt, dass beim Klick auf das Menü nur ein kleines Eckchen zu sehen ist (leeres Popupmenü) und der eigene ActionListener gar nicht anspringt.
3) Dem JButton die MenuUI verpassen:
Man kann ja via
Code:
setUI()
Java:
myMenuButton.setUI( UIManager.getUI(new JMenu()) );
// myMenuButton vom Typ JButton
Mit den UIs habe ich bisher nichts gemacht und weiß daher auch nicht sicher, wie ich damit umgehen muss, sprich ob es überhaupt möglich ist, nem JButton die UI von einem JMenu zu geben (immerhin erben beide von AbstractButton).
Also soweit mein Problem. Danke schonmal fürs Lesen und Nachdenken