JPopupMenu: Nach oben aufpoppen

Status
Nicht offen für weitere Antworten.

Angel4585

Bekanntes Mitglied
Moin!

Ich möcht mir ein Menü basteln das nach oben aufklappt.
Leider wird bei jPopupMenu1.getHeight() immer 0 angezeigt, sodass ich nicht einfach die Position anders setzen kann.
Kann mir jemand sagen wie ich das nach oben aufklappen kann?
 
Wenn du das PopupMenu mal am unteren Bildschirmrand öffnest (dort, wo es nicht genug Platz hätte, wenn es nach unten aufpoppen würde) dann poppt es nach oben auf. Analog dazu sollte das Menü, wenn es nach oben aufpoppen würde, und da nicht genug Platz hätten hätte (doppelter Konjunktiv), nach unten aufpoppen.

NB: Ich versteh' das nicht: Swing bietet Millionen von Funktionen, um eine unerschöpfliche Menge von verschiedenen, an alle erdenklichen Bedürfnisse angepassten Programmen zu schreiben. Jeder nur erdenkliche Scheißdreck kann mit irgendeinem (manchmal versteckten, aber doch vorhandenen) Flag oder Parameter eingestellt werden. Aber dann kommt doch immer wieder jemand: "Kann man die Labels bei einem Slider auch oben anzeigen?", "Der Rand von einem Frame ist eckig, kann man die Ecken abrunden?", "Die Tooltips sind mit ein bißchen zu gelb, kann man die ein bißchen weniger gelb machen?", "Der Pfeil bei der Combobox ist mir zu spitz, kann man den weniger spitz machen?", oder "Das PopupMenu poppt nach unten auf, kann man das auch nach oben aufpoppen lassen?".

Sorry, das hilft dir jetzt nicht bei deinem Problem - äh, bei deinem """Problem""". (Soll heißen: Gibt's nichts wichtigeres in deinem Programm?). Ich werde mir vielleicht mal Gedaken darüber machen, wie man ein PopupMenu nach oben aufpoppen lassen kann. In der API nachsehen, ob es eine Methode gibt wie "setPopupDirection". Mir vielleicht mal den Quellcode ansehen, und nachsehen, wo denn die Entscheidung getroffen wird, in welche Richtung es aufpoppt, und dann vielleicht überlegen, wie man die Aufpopprichtung ändern könnte. Aber ob ich das mache, hängt davon ab, wie du die Frage beantwortest, die sich IMHO automatisch ergibt, wenn jemand Frage stellt, wie man ein PopupMenu in die entgegengesetzte RIchtung aupoppen lassen kann: Wozu das ganze?
 
Da kann ich mich Marco13 nur anschließen.
Jedes vernünftige Look and Feel versucht sich an der gängigen Praxis zu orientieren, damit sich der Anwender möglichst schnell zurecht findet. Wer das krampfhaft versucht umzubiegen, sollte sich fragen: warum?
 
Ich brauch das ja genau weil ich mich an einem gängigen Standard orientieren will.

Ich möchte eine Art Desktop basteln mit einer Taskleiste am unteren Rand, wie bei Windows.
Dazu eine Art Start Button, bei dem wenn man ihn anklickt ein menü nach oben ausgeklappt wird.

Sicher ist das nur eine Randfunktion - und ich arbeite während die Frage hier steht auch weiter an anderen, wichtigeren Funktionen - und lässt sich notfalls über ein eigenes JPanel oder ein JMenu am oberen Rand lösen. Ich habe nur gefragt, für den Fall das es sowas gibt, weil ich nichts dazu finden konnte.
 
Hm. Aber wenn du das so ähnlich wie beim Win machen willst dann hast den Button oder was auch immer doch sowieso links unten (oder zumindest unten) und somit popt das teil ja nach oben auf...
 
midnigg hat gesagt.:
Hm. Aber wenn du das so ähnlich wie beim Win machen willst dann hast den Button oder was auch immer doch sowieso links unten (oder zumindest unten) und somit popt das teil ja nach oben auf...

Ja aber das geht über den Fensterrand nach unten raus, also wenn das Fenster nicht maximiert ist, siehts doof aus 😉

Anonymous hat gesagt.:
Die Show-Methode von JPopupMenu hat Koordinaten als Parameter.

Dazu muss ich vorher wissen wie groß das Popup ist, und die Höhe ist leider nciht mit angegeben, bzw zu dem zeitpunkt noch 0.


Ich werde es wohl mit einem eigenen JPanel lösen, da bin ich wenigstens unabhängig von dem Popup
 
Könnte das so nicht gehen?

Code:
pop.show(tree, x - pop.getSize().width, y - pop.getSize().height);

Achso. X/Y sind von der Maus die Koordinaten also:

Code:
public void mouseClicked(MouseEvent evt)
	{
			int x = evt.getPoint().x;
			int y = evt.getPoint().y;
                ...
 
Angel4585 hat gesagt.:
Anonymous hat gesagt.:
Die Show-Methode von JPopupMenu hat Koordinaten als Parameter.

Dazu muss ich vorher wissen wie groß das Popup ist, und die Höhe ist leider nciht mit angegeben, bzw zu dem zeitpunkt noch 0.
Zum Zeitpunkt, wo du es anzeigen sollst, weisst du wieviele Einträge drin sind und
wie hoch jeder Eintrag im Menü ist. Rest ist Mathe. 😉
 
Das aus der Anzahl der Einträge auszurechnen ist nicht so gut... (wie auch immer das gehen sollte). Aber statt
jPopupMenu1.getHeight()
könntest du
int h = jPopupMenu1.getPreferredSize().height;
verwenden, und das dann verwenden, um as menü anzuzeigen:
popup.show(x, y - h);
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben