JPopupMenu

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Morgen zusammen,

hab da mal ein Problem. Wollte mich gerade an das JPopupMenu wagen und bekomme schon bei den einfachsten Sachen Probleme. Es wird nämlich erst gar nicht angezeigt.

Code:
JPanel pane = new JPanel();
JPopupMenu datei = new JPopupMenu("Datei");
pane.add(datei);

Dadurch müsste doch eigentlich zumindest ein Button angezeigt werden!? ???:L
 

AlArenal

Top Contributor
Ein PopupMenu fügt man auch keinem Panel per add hinzu. Stattdessen übergibt man im Konstruktor des Menus das Panel als Parent-Component.
 

The_S

Top Contributor
Danke für die Antwort, aber warum brauch ich show dafür? Bei z. B. nem JButton brauch ich ja auch nicht nochmal show()!?
 

Snape

Bekanntes Mitglied
Nun, ein Popup ist ja eigentlich eher als Kontextmenü gedacht. So kann man sich das JPopupMenü erst zusammenbauen, bevor es angezeigt wird. Auch die Positionierung des Popups kann ja bestimmt werden iirc.
 

The_S

Top Contributor
AlArenal hat gesagt.:
Ein PopupMenu fügt man auch keinem Panel per add hinzu. Stattdessen übergibt man im Konstruktor des Menus das Panel als Parent-Component.

Parent-Component? Den Ausdruck hab ich ja noch nie gehört :oops:
 
S

stev.glasow

Gast
Dann bitte Häckchen machen -> Links unten is'n Button.
 

daLenz

Aktives Mitglied
hei hobbit,

ein anderer ansatz wäre, einen mouselistener zu schreiben, und beim mouserelease-event kannst du z.B. mit arg0.isPopupTrigger() (--> rechtsklick ) das popupmenü anzeigen lassen:

hier ein kleines beispiel:
Code:
/** 
* MouseListener
*/
private class MouseListener extends MouseAdapter {

    public void mouseReleased(MouseEvent arg0) {
        super.mouseReleased(arg0);

        if (arg0.getClickCount() == 1) {

               // Kontextmenü
                if (arg0.isPopupTrigger()) {

                    mnuPopup.show(
                        welchekomponente,
    	            arg0.getX(),
	            arg0.getY());
                }
        }
    }
}

nun musst du nur noch den mouselistener auf eine komponente setzen...


hoffe hilft weiter!

greetz
 

AlArenal

Top Contributor
daLenz hat gesagt.:
ein anderer ansatz wäre, einen mouselistener zu schreiben, und beim mouserelease-event kannst du z.B. mit arg0.isPopupTrigger() (--> rechtsklick ) das popupmenü anzeigen lassen:

In der Theorie ist das richtig. In der Praxis mussten Kollegen und ich letztens feststellen, dass die Methode isPopupTrigger() nicht zuverlässig arbeitet. Ich kann stundenlang unter Windows auf der rechten Maustaste rumhämmern und das Teil liefert doch immer false zurück. Sollte nicht sein, ist aber seltsamerweise so... Also unterscheide ich nur zwischen linker Maustaste und "den anderen". Sollte mal einer unsere Software auf nem Mac benutzen, sollte er sich besser ne Maus mit mehr als einem Button kaufen.. Oder liefert Shift-Apfel-Mausklick intern in Java auch nen Nicht-Linke-Maustaste-Code? Habe keinen Mac (*seufz*) ums testen zu können.

Wenn ich mal viel zuviel Geld habe....
 

daLenz

Aktives Mitglied
AlArenal hat gesagt.:
In der Theorie ist das richtig. In der Praxis mussten Kollegen und ich letztens feststellen, dass die Methode isPopupTrigger() nicht zuverlässig arbeitet.

ach ja? also bei mir funktioniert es...ich habe es bisher jedoch nur bei JTabel & JList benutzt...aber gut zu wissen!
 

Snape

Bekanntes Mitglied
AlArenal hat gesagt.:
In der Theorie ist das richtig. In der Praxis mussten Kollegen und ich letztens feststellen, dass die Methode isPopupTrigger() nicht zuverlässig arbeitet. Ich kann stundenlang unter Windows auf der rechten Maustaste rumhämmern und das Teil liefert doch immer false zurück. Sollte nicht sein, ist aber seltsamerweise so...

MouseEvents sind manchmal tricky. Für gewisse MouseEvents ist mouseReleased() nötig, für andere mouseClicked(). Probier mal letzteres für den PopupTrigger.

Sollte mal einer unsere Software auf nem Mac benutzen, sollte er sich besser ne Maus mit mehr als einem Button kaufen..

STRG-Mausklick öffnet auf dem Mac das Kontextmenü, sollte also auch den PopupTrigger auslösen.

Oder liefert Shift-Apfel-Mausklick intern in Java auch nen Nicht-Linke-Maustaste-Code?

Habe ich noch nicht ausprobiert.

Habe keinen Mac (*seufz*) ums testen zu können.

Wenn ich mal viel zuviel Geld habe....

Die sind nicht (viel) teuerer als PCs, wenn Du mal die ganzen Soft und OS dazu rechnest.
Mein 20" TFT iMac kostete rd 1800 - alleine der 20"er kostet schon nen Tausi. 800 für den Rechner incl Soft und OS ist da nicht so überdimensioniert, wie es auf den ersten Blick aussehen mag.
 

AlArenal

Top Contributor
Snape hat gesagt.:
MouseEvents sind manchmal tricky. Für gewisse MouseEvents ist mouseReleased() nötig, für andere mouseClicked(). Probier mal letzteres für den PopupTrigger.

Ich nutze bereits mouseClicked(), keine Ahnung warum isPopupTrigger() versagt *achselzuck*

Die sind nicht (viel) teuerer als PCs, wenn Du mal die ganzen Soft und OS dazu rechnest.
Mein 20" TFT iMac kostete rd 1800 - alleine der 20"er kostet schon nen Tausi. 800 für den Rechner incl Soft und OS ist da nicht so überdimensioniert, wie es auf den ersten Blick aussehen mag.

Ich schaue schon öfter mal bei eBay, aber wenn ich die Preise für nen gebrauchten G4 sehe und dann noch evtl. Kosten für RAM und ne Mac OS X Lizenz dazurechne und schaue was mich ein Mac Mini kosten würde, lohnt sich der Gebrauchtkauf nicht. Noch ätzender siehts aus, wenn man auf nen Cube schielt, zumal wenn man die Leistungsdifferenz sieht. Und beim Mac Mini warte ich lieber ab, bis Apple Modellpflege (Grafikkarte) betreibt. Früher oder später landet so ein Teil mal bei mir.. bin ganz rattig auf Mac OS X. Derzeit mache ich aber alles auf meinem Notebook und bin auf dem Ich-kauf-mir-ne-alte-SGI-Workstation-und-dann-noch-eine-Trip ;)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben