Aus einem Listener auf eine Klassenvariable zugreifen.

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi ihr,

ich hab mir ein Kontext Menü zusammen gebaut und so wollte ich es mir einbinden:


Code:
JTree.addMouseListener(new MouseAdapter(){
			public void mouseReleased(MouseEvent m){
				//maus wird losgelassen
				
				if((m.getModifiers()&MouseEvent.BUTTON3_MASK)==MouseEvent.BUTTON3_MASK){ 
					ContextMenu cM = new ContextMenu(HIER SOLLEN KLASSENVARIABLEN MITGEGEBEN WERDEN);
					JTree.add(cM);
					cM.show(m.getComponent(),m.getX(),m.getY());
				}
			}
		});

Also, mit der rechten Maustaste sollte dann nen popup kommen, wo man was auswählen kann. Nur wollte ich für die Auswahl Strings an die ContextMenu Klasse mitgeben und zwar die, die gerade in der Klassenvariable stehen.
Nur das dumme ist, durch den Anonymen MouseAdapter kann ich nicht auf meine Klassenvariablen oder sonst was zugreifen.
Hat einer von euch ne Idee, die man das machen könnte?
 
Selbstverständlich kannst du auf die Klassenvariablen zugreiffen, benötigst dafür nichtmal speziellen Syntax. Auch Objektvariablen sind kein Problem. Lokale Variablen hingegen müssen "final" sein, damit du auf sie zugreiffen kannst.

Ist das ein theoretisches Problem (= hast du es ausprobiert?), oder ein konkretes? Falls es ein konkretes ist, zeige uns doch die ganze Klasse und die Variablen auf die du zugreiffen willst.

P.S. mit "MouseEvent.isPopupTrigger" findest du zuverlässig raus, ob der Standard-Popup-Trigger (der nicht unbedingt die rechte Maustaste sein muss) gedrückt wurde.
 
Danke für Infos - hab den Fehler gefunden, steckte dann doch in meinem Quelltext.

Aber hätte dann noch mal ne weitere Frage:

Wie bekomme ich in dem Popupmenü ein untermenü rein?
Also, dass man mit der Maus durch das Menü geht, da steht dann nen Pfeil und der Pfeil macht dann wieder nen Untermenü auf.


Code:
MenuItem mItem;
		
mItem = new MenuItem("Untermenü ->");
mItem.addActionListener(this);
this.add(mItem);

Der -> soll nur beispielhaft sein 😉
 
Du kannst da einfach ein neues JMenu benutzen. Ein JMenu ist auch ein JMenuItem.
 
Ja das ist mir schon klar, aber ich hab das Kontextmenü von PopupMenu erben lassen

class ContextMenu extends PopupMenu

und da kann man nur awt adden.
Oder von was sollte man erben lassen, dass man nen JMenu + Item adden kann?
 
In dem Falle:
Du kannst da einfach ein neues Menu benutzen. Ein Menu ist auch ein MenuItem.

Code:
Menu deinNeuesMenu = new Menu();
deinNeuesMenu.add( ... );
popupMenu.add( deinNeuesMenu );
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben