JMenu Bug?

Status
Nicht offen für weitere Antworten.

Alien

Mitglied
Hallo,

ich bin gerade dabei eine Anwendung zu programmieren, die man über den System-Tray aufrufen kann. Ich habe Anfangs die Variante von Sun genutzt. Allerdings kann man die Menüs nur in AWT programmieren.
mehr Infos => SystemTray (Java Platform SE 6)
Das Menü ist dynamisch und wird jede Minute aktualisiert. Nun ist es so, wenn ein Menü z.B. mit mehr wie 100 Einträge erzeugt wird, man nach unten bzw. nach oben Scrollen kann, weil der Bildschirm für das Menü nicht groß genug ist. Das funktioniert in AWT ausgezeichnet.

Jetzt verwende ich folgenede Systemtray-Variante, um Swing-Menüs verwenden zu können.
https://jdic.dev.java.net/
Das automatische generieren von den Menüs funktioniert auch wieder prima. Nur gibt es keine Möglichkeit (mir ist keine bekannt) nach oben bzw. nach unten zu scrollen. Gibt es eine Möglichkeit den JMenüs eine Art-Scroll-Funktion zu geben.

Existiert eine Alternative für die JMenüs? "Ich will die Menüs über den System-Tray erreichen!!!"

[HIGHLIGHT="Java"]import javax.swing.*;
public class DynamicJMenu extends JMenu
{
public DynamicJMenu(int dynamic) //dynamic zB 123
{
for(int i = 0; i < dynamic; i++)
{
this.add(new JMenu("Menu " + (i+1));
}
}
}[/HIGHLIGHT]
Das ist natürlich nur ein Beispiel.

Schonmal danke für die Hilfe! ;-)

MfG
Alien
 
Zuletzt bearbeitet von einem Moderator:

Alien

Mitglied
Was genau war das Problem mit den AWT Menus?
1. Die Menus sehen auf jedem Betriebssystem anders aus. (weniger wichtig - sieht nun aber vom Design schöner aus - Naja.. ist Geschmackssache.. wie Pizza oder Spaghetti)
2. Ich habe zu wenig Klassen / Objekte für meine Anwendung genutzt, sodass Veränderungen / Erweiterungen an der Menü-Struktur sehr schwierig bzw. umständlich sind. Weil ich mich noch am Anfang befinde, bietet es sich an mit Swing anzufangen und nicht mit AWT!
3. Swing hat viel mehr Funktionalitäten wie AWT?!

Was würdest du bevorzugen Swing oder AWT und warum? Ich denke ich fahre mit Swing einfach besser.

Ich mache nun für jeden Menüpunkt eine eigene Klasse.
extends JMenu, extends JMenuItem implements ActionListener,... usw.. So kann ich sehr einfach und schnell eine Änderung vornehmen, ohne den Überblick zu verlieren. Vorher hatte ich die Menüs direkt in einer Methode erzeugt und anonyme ActionListener verwendet.
 

Wildcard

Top Contributor
Moment!
Es geht nicht darum eine Anwendung nach AWT zu portieren, AWT ist schon lange tot.
Die Anwendung bleibt natürlich Swing, nur das TrayIcon Menü muss sowieso Heavy-Weight sein, da kann es auch direkt AWT sein (und nichts anderes hat SUN mit der API gemacht).
Also solange du keine Funktionalität brauchst die ein JMenu hat, ein AWT Menu aber nicht (und da fällt mir jetzt keine ein), dann versuche es nicht krampfhaft mit Swing, sondern bleibe dabei wie es die J2SE vorsieht.
 

Wildcard

Top Contributor

JBenutzername

Aktives Mitglied
Ich würde niemals ein Feature einsetzen das erst in einer bestimmten Update eingeführt wurde. Auf's nächste Release warten und bis dahin stirbt niemand an einem AWT Menu.

Das funktioniert auch mit älteren Versionen, dann überlappt das Menü die Taskleiste nicht und es kann eine ClassCastException geworfen werden (sollte man aber ohne Probleme auffangen und ignorieren können).

Und mal ehrlich: Dass in einem Update Bugs gefixt werden, ist nichts wahnsinnig besonderes.
 

Alien

Mitglied
Danke für die Antworten.

@JBenutzername
Werde mir die JXTrayIcon-Klasse mal anschauen.

@Wildcard
Bei JMenu gibt es zB setToolTipText("blub"). Finde ich sehr praktisch, weil man direkt eine Beschreibung hinterlegen kann und der Anwender direkt sieht, für was das Menü gedacht ist. ("Aha-Effekt") Außerdem aktualisieren sich die Menüs während der Nutzung. Unter Windows (AWT) muss man jedes mal das Menü verlassen und dann wieder neu öffnen, damit man eine Aktualisierung vorfindet. Bei MAC (AWT) wird beispielsweise das Menü sofort aktualisiert. Auch wenn ich Swing nicht ausschöpfen sollte, werde ich sicherlich in naher / ferner Zukunft mal eine Funktion benötigen, die AWT nicht bietet. Die setToolTipText("blub")-Methode will ich schon nicht mehr vermissen, weil es einfach viel hermacht und für den Anwender selbsterklärend ist!

Auch der Vergleich jetzt (Swing) und vorher (AWT) ist gigantisch. Sieht einfach super aus!

Jetzt habe ich halt immer noch das Problem, dass ich das Menü nicht scrollen kann.

Weiß jemand Rat?
 

Wildcard

Top Contributor
Ok, das mit dem Tooltip sehe ich ein, das funktioniert wohl nicht. Der dynamische Aspekt, hast du es mal mit validate versucht? Ich habe schon lange nichts mehr mit Swing und AWT gemacht, aber dieser Teil sollte sich auf beiden Toolkits doch eigentlich gleich verhalten.
 

slawaweis

Bekanntes Mitglied
Existiert eine Alternative für die JMenüs?
erst mal eine Frage. Warum werden die über "100 Einträge" in das Menu nicht auf Submenüs verteilt? Schon alleine aus der Usersicht wäre es besser, wenn man nicht alles durchlesen muss, sondern sich nur durch die passenden Kategorien klickt.

Weiterhin kann man an den TrayIcon einen MouseListener anheften. Über den kann man die Klicks mit der rechten oder linken Taste abfangen, mit der Position der Maus. Neben der Position kann man dann ein eigenes (J)Window zeigen, welches z.B. eine JList oder was ähnliches enthält, wo alles reinpasst.

Slawa
 

Alien

Mitglied
Ok, das mit dem Tooltip sehe ich ein, das funktioniert wohl nicht. Der dynamische Aspekt, hast du es mal mit validate versucht? Ich habe schon lange nichts mehr mit Swing und AWT gemacht, aber dieser Teil sollte sich auf beiden Toolkits doch eigentlich gleich verhalten.
Wie funktioniert das mit der validate?

Ich sollte an dieser Stelle erklären was mein Programm macht, weil validate meines Erachtens an dieser Stelle nicht funktioniert (ohne zu wissen, wie diese Methode funktioniert).
Ich spiele ab und zu zum Zeitvertreib ein Fungame / Geschicklichkeitsspiel namens Armagetron. Ihr kennt sicherlich Snake. Das ist so ähnlich. Nur in 3D und multiplayerfähig. Tron der Film ist der Grund, warum dieses Spiel existiert. Den Film (von 1982 - schon Computeranimiert) kennen bestimmt einige von euch. Demnächst soll Tron 2 in die Kinos kommen. (Wird bestimmt ein Kracher) Das nur so zum Rande.
Nun habe ich ein PHP-Script, was mir die Server, Spieler, IPs, Ports,.. liefert. Wenn man im Tray das PopupMenü öffnet, sieht man die Menüpunkte "Favourites", "Servers" und "Players". Geht man auf den Menüpunkt Servers, dann werden alle Server angezeigt und wenn man dann wiederum auf einen Server geht, werden alle darauf spielenden Spieler angezeigt. Klickt man auf einen Spieler, startet das Spiel und man verbindet direkt zum Server. Da meistens nur 30 (oder weniger) Server belegt sind, besteht bei dem Menüaufbau kein Problem.
Der Menüpunkt (Popup) Players, ist im Prinzip umgedreht. Es werden alle Spieler alphabetisch angezeigt und wenn man auf einen Spieler geht, öffnet sich ein MenuItem mit der Beschriftung, auf welchem Server sich der Spieler befindet. Wenn zB nur max. 40 Spieler Armagetron spielen würden, bestände das Problem nicht, weil die Spielerliste sehr wahrscheinlich auf einen Bildschirm passt. Es existieren aber mehr Spieler! In dem Menü Favourites, kann man sich Server und Spieler herausfiltern. Das geht einfach und schnell über eine .ini-Datei. Bei dem Menü Favourites besteht auch kein Problem wegen dem zu großem Menü. Die Problematik, die ich oben beschrieben habe, ist nur bei der Spielerliste. Lange Reder kurzer Sinn. Ich habe im Anhang die AWT-Anwendung. Die Swing-Anwendung hat (bereits) bzw. wird viel mehr Funktionalitäten haben.

erst mal eine Frage. Warum werden die über "100 Einträge" in das Menu nicht auf Submenüs verteilt? Schon alleine aus der Usersicht wäre es besser, wenn man nicht alles durchlesen muss, sondern sich nur durch die passenden Kategorien klickt.

Weiterhin kann man an den TrayIcon einen MouseListener anheften. Über den kann man die Klicks mit der rechten oder linken Taste abfangen, mit der Position der Maus. Neben der Position kann man dann ein eigenes (J)Window zeigen, welches z.B. eine JList oder was ähnliches enthält, wo alles reinpasst.

Slawa

Nach welchem Kriterium soll ich die Submenüs erstellen? A->Z? Ich habe mir das so gedacht, falls es keine Möglichkeit bzgl. des Menüscrollens geben sollte, maximal 40 Menüs anzeigen zu lassen und wenn es dann mehr werden, alphabetisch Menüpunkte erstellen lasse (A->Z), um dort dann die Spieler unterzuordnen.

Das mit dem JWindow und JList ist eine gute Idee. Werde mich mit dieser Option zu gegebener Zeit auseinandersetzen.
 

Anhänge

  • _MoniTron_.zip
    42,5 KB · Aufrufe: 1

Ebenius

Top Contributor
Sie hätten dabei bleiben sollen, keine Features in Minor Updates, nur Bugfixes
Früher gab's auch Features in Minor Version changes (1.4.0 => 1.4.1 und so weiter). Aber heute gibt es eben keine Minor Versions mehr, sondern nur noch Major Version und Update. Kein Wunder, dass Sun mit diesem zu starren neueren Versionskonzept auf die Nase fällt. Aber was will man gegen politische Entscheidungen schon unternehmen... ?

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ExceptionOfExpectation JMenu, setMnemonic(Char k) bringt keine Wirkung AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
Y Backgroundcolor JMenu AWT, Swing, JavaFX & SWT 2
D Merkwürdiges Verhalten vom JMenu AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
S AWT JTextFields durch Array im JMenu erzeugen? AWT, Swing, JavaFX & SWT 19
E JMenu erscheint nach RDP-Verbindung auf falschem Desktop AWT, Swing, JavaFX & SWT 1
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
llabusch Prüfen ob JMenu leer ist & löschen AWT, Swing, JavaFX & SWT 1
3 Swing Vertikaler Separator zwischen JMenu's AWT, Swing, JavaFX & SWT 2
S JMenu unter JPanel versteckt AWT, Swing, JavaFX & SWT 5
S jMenu wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
K Swing JMenu und ActionListener AWT, Swing, JavaFX & SWT 4
T JMenu reagiert auf F-Taste AWT, Swing, JavaFX & SWT 6
M JMenuBar, JMenu, JMenuItem wird nicht angezeigt AWT, Swing, JavaFX & SWT 16
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
Kenan89 JMenu Fragen AWT, Swing, JavaFX & SWT 5
B Swing JMenu zwischen anderen Componenten AWT, Swing, JavaFX & SWT 4
R JMenu aus Ordnern AWT, Swing, JavaFX & SWT 4
P JMenu aus Dateistruktur AWT, Swing, JavaFX & SWT 2
I JMenu AWT, Swing, JavaFX & SWT 5
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
frankred Swing JMenu verschwindet nicht beim klicken ausserhalb des JMenu! AWT, Swing, JavaFX & SWT 4
F JMenu auf JPanel AWT, Swing, JavaFX & SWT 5
E Swing JMenu in GUI einbinden AWT, Swing, JavaFX & SWT 5
S Probleme mit JMenu und JMenuItem AWT, Swing, JavaFX & SWT 2
E JMenu übersetzen AWT, Swing, JavaFX & SWT 9
W JMenu wird vom JPanel ständig überzeichnet... Abhilfe? AWT, Swing, JavaFX & SWT 3
P JMenu-Erweiterung in externer Datei AWT, Swing, JavaFX & SWT 5
T Swing JMenu als Button behandeln AWT, Swing, JavaFX & SWT 4
T Swing jMenu AWT, Swing, JavaFX & SWT 6
R JMenu in JToolBar AWT, Swing, JavaFX & SWT 6
T Swing JMenu falsch positioniert AWT, Swing, JavaFX & SWT 2
M JMenu teilweise unter einer JComponent AWT, Swing, JavaFX & SWT 4
Developer_X Swing JMenu Bug gefunden AWT, Swing, JavaFX & SWT 5
D Swing JMenu wieder schließen lassen AWT, Swing, JavaFX & SWT 7
E Swing Einfache Frage zu JMenu AWT, Swing, JavaFX & SWT 4
hdi Welche Klasse + Listener für JMenu AWT, Swing, JavaFX & SWT 2
J JMenu unterschiedliche Background einstellen AWT, Swing, JavaFX & SWT 5
C JMenu bzw. JButton mit URL versehen AWT, Swing, JavaFX & SWT 2
G ActionListener auf JMenu funktioniert nicht AWT, Swing, JavaFX & SWT 4
X JMenu AWT, Swing, JavaFX & SWT 2
D Abfrageproblem bei JMenu mit Icon AWT, Swing, JavaFX & SWT 2
Ernesto95 Programmabsturz beim Einbinden eines JMenu AWT, Swing, JavaFX & SWT 18
P jMenu ohne Menubar - Jigloo zeigts AWT, Swing, JavaFX & SWT 2
S JMenu und ActionListener per Schleife erzeugen AWT, Swing, JavaFX & SWT 3
G Scrollbares JMenu AWT, Swing, JavaFX & SWT 4
A Bei Klick auf disabled JMenuItem JMenu nicht schließen AWT, Swing, JavaFX & SWT 2
G JMenu problem mit der Breite von einer JCheckBox AWT, Swing, JavaFX & SWT 2
V JMenu und die Tabs von JTabbedFrame sind auf einmal schwarz AWT, Swing, JavaFX & SWT 3
H JMenu wird leider unterhalb! der CanvasFläche dargestellt AWT, Swing, JavaFX & SWT 5
X Swing: Bilder überlagern JMenu AWT, Swing, JavaFX & SWT 4
T ImageIcon als Seperator im Jmenu AWT, Swing, JavaFX & SWT 8
padde479 JMenu mnemonic AWT, Swing, JavaFX & SWT 3
N JMenu und JPanel AWT, Swing, JavaFX & SWT 5
P JMenu / JMenuItem durch Rekursion Icons entfernen AWT, Swing, JavaFX & SWT 4
B 1 JMenu in Mehrere JMenus AWT, Swing, JavaFX & SWT 2
G Canvas, JMenu, und BufferStrategy AWT, Swing, JavaFX & SWT 2
D JMenu -> Accelerator AWT, Swing, JavaFX & SWT 2
I JMenu(Item) und FocusListener AWT, Swing, JavaFX & SWT 3
T JMenu/JMenuItem Component auf der geaddet wurde AWT, Swing, JavaFX & SWT 16
G JMenu About ohne JMenuItem AWT, Swing, JavaFX & SWT 11
R JMenu + Farbe von Hintergrund AWT, Swing, JavaFX & SWT 2
M JMenu verschwindet unter ScrollPane AWT, Swing, JavaFX & SWT 3
D Schriftfarbe ändern (JFrame, JMenu etc) AWT, Swing, JavaFX & SWT 3
K JMenu wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
I JMenu wird nicht dargestellt AWT, Swing, JavaFX & SWT 12
H JMenu soll "offen bleiben" AWT, Swing, JavaFX & SWT 3
M JMenuBar - JMenu mit Tastenkombination aufrufen / anzeigen AWT, Swing, JavaFX & SWT 8
redztripe Haken in JMenu setzen? AWT, Swing, JavaFX & SWT 8
G Icon zu JMenu AWT, Swing, JavaFX & SWT 3
M JMenu auf JComponent? AWT, Swing, JavaFX & SWT 10
G JMenu - neuer Frame AWT, Swing, JavaFX & SWT 2
X Verschwinden des JMenu unterbinden AWT, Swing, JavaFX & SWT 3
R JMenu copy Focus-Problem AWT, Swing, JavaFX & SWT 2
E JTextArea überlagert JMenu AWT, Swing, JavaFX & SWT 2
D JMenu spinnt AWT, Swing, JavaFX & SWT 7
Z JMenu und JMenuItem: MouseOver-Farbe ändern AWT, Swing, JavaFX & SWT 9
B Alle jMenu und JMenuItem in einem Array AWT, Swing, JavaFX & SWT 4
R JMenu einträge werden überdeckt AWT, Swing, JavaFX & SWT 3
T JMenu erscheint nicht richtig AWT, Swing, JavaFX & SWT 6
G JMenu Info-Fenster ganz Rechts AWT, Swing, JavaFX & SWT 5
H JMenu zuklappen AWT, Swing, JavaFX & SWT 7
K JMenu Aktionen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben