Hässlicher Punkt bei JPopupMenu

Status
Nicht offen für weitere Antworten.

Ralf Ueberfuhr

Bekanntes Mitglied
Ich habe ein JPopupMenu mit einem PopupListener. Bevor das Menü aufgeht, sollen Bedingungen überprüft und so evtl. einige JMenuItems ausgeblendet werden. Es kann aber auch vorkommen, dass alle Items ausgeblendet werden. Dann öffnet sich das Popup aber trotzdem, und dann sieht man so einen hässlichen Punkt.

Gibt es eine Möglichkeit, das Öffnen des Popups dann zu verhindern? Leider bietet das Event keine cancel()-Methode an.
Oder hilft da nur sowas wie

Code:
				if(!list.isEnabled()) SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						popupMenu.setVisible(false);
					}
				});
 
masseur81 hat gesagt.:
Ich habe ein JPopupMenu mit einem PopupListener. Bevor das Menü aufgeht, sollen Bedingungen überprüft und so evtl. einige JMenuItems ausgeblendet werden. Es kann aber auch vorkommen, dass alle Items ausgeblendet werden...
..in dem Fall würde ich ein JMenuItem("No suggestions") einblenden.
 
Das ist fallabhängig. Ein Kontextmenü zeigt Funktionen an, die ich auf ein Objekt ausführen kann. Und es sollte nur die anzeigen, die ich auch anwenden kann, und nicht die, die ich woanders, unter anderen Bedingungen etc. anwenden könnte.

"No suggestions" ist keine Funktion, ergo auch nicht Bestandteil eines Kontextmenüs.

In meinem Fall wird die angeklickte Komponente außerdem als "disabled" markiert. Der Benutzer wundert sich also nicht über seine tote Maus.

Aber ich will nicht im großen Rahmen darüber diskutieren. Ich möchte nur meine Frage beantwortet wissen.
 
was hindert dich daran einfach kein popup.show() aufzurufen, wenn du alle items entfernt hast, oder keine hinzugefügt hast ???:L
 
Ich habe das Menü per setComponentPopupMenu hinzugefügt, habe also keinen Einfluss auf zeigen oder nicht zeigen, denn ich verwende keine Mouse- oder KeyListener.

Die Überprüfung der anzuzeigenden Einträge erfolgt im PopupListener, also wenn es schon zu spät ist.

O.g. Alternative mit dem anschließenden Schließen funktioniert, ich wollte nur gern wissen, ob es eine schönere Alternative gibt.
 
masseur81 hat gesagt.:
Ich habe das Menü per setComponentPopupMenu hinzugefügt, habe also keinen Einfluss auf zeigen oder nicht zeigen, denn ich verwende keine Mouse- oder KeyListener.

achso, dann versuch mal mit addPopupMenuListener() nen PopupMenuListener hinzuzufügen und in der popupWillBecomeVisible() popup.setVisible(false); aufzurufen, falls nix drin is.
 
sieh mal in den allerersten post. genau das habe ich. es gefällt mir aber eben nur 99%ig, weil das popup für eine millionstel sekunde geöffnet wird. aber ich lass es jetzt so. hab nicht soviel zeit, lange darüber nachzudenken.
 
also bei mir wird da kein popup geöffnet.

benutz doch einfach nen mouselistener 😀
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben