Newsgroup: it.comp.java
Titolo: popup item action e ricavare l'oggetto sorgente

ho un popup menu che si apre quando clicco col pulsante dx del mouse
su di un bottone.
come faccio a capire su che bottone e' stato aperto il popup quando
effettuo la gestione dell'action associata ad uno dei suoi item?
ovvero, clicco col dx e seleziono una voce. all'interno dell'action
performed come faccio a risalire all'oggetto sul quale ho cliccato col
dx per aprire il popup?
spero di essermi spiegato...
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

effettuo la gestione dell'action associata ad uno dei suoi item?
import java.awt.*;
import java.awt.event.*;
public class TestPopupMenu extends WindowAdapter implements
ActionListener
{
	Frame fr;
	Label lbl;
 
	public static void main(String[] args)
	{
		new TestPopupMenu().exec();
	}
 
	void exec()
	{
		fr=new Frame("test");
		fr.addWindowListener(this);
		fr.setSize(640,480);
		Button one=new Button("one");
		one.setActionCommand("one");
		one.addActionListener(this);
		lbl=new Label("Clicca uno dei due bottoni");
		fr.add(lbl,"Center");
		fr.add(one,"North");
		Button two=new Button("two");
		two.setActionCommand("two");
		two.addActionListener(this);
		fr.add(two,"South");
		fr.setVisible(true);
	}
 
	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}
 
	public void actionPerformed(ActionEvent e)
	{
		Object source=e.getSource();
		String command=e.getActionCommand();
		if(source instanceof Button)
		{
			Button src=(Button)source;
			PopupMenu pm=new PopupMenu();
			MenuItem mi=new MenuItem("test");
			mi.addActionListener(this);
			pm.add(mi);
			src.add(pm);
pm.show(fr,fr.getSize().width/2,fr.getSize().height/2);
		}
		else if(source instanceof MenuItem)
		{
			MenuItem src=(MenuItem)source;
			PopupMenu parent=(PopupMenu)src.getParent();
			Button grandParent=(Button)parent.getParent();
			String info="Il menù è figlio di
"+grandParent.getActionCommand();
			lbl.setText(info);
		}			
	}
}
HTH,
Mauri.
-- 
La forza di gravità è un falso mito,
è la Terra che succhia!

		}			
il parent del parent... no. il parent e' il popup ma il parent del
popup e' null...
io pero' creo il popup e i suoi item in modo diverso.
creo tutto all'avvio dell'applicazione e quando clicco col dx sul
bottone mi limito a fare una show...


Gli eventi mediante le chiamate getSorce() e getObject() (Onestamente non ho
mai capito la differenza visto che entrambi ritornano un Object comunque io
uso sempre : getOnject()) tornano l'oggetto dal quale sono partiti.
Se vuoi sapere se č un genere basta che fai :
    Object sorg = event.getObject();
    if(sorg instanceof JButton)
    {
    }
Se vuoi sapere se č un ben determinato oggetto fai il piů classico confronto
:
    Object sorg = event.getObject();
    if(sorg == pippo)
    {
    }else if(sorg == pluto)
    {
    }
Spero di aver capito la tua richiesta e di esserti stato utile.


no, cosi' non va. siccome l'evento e' l'action generata quando
seleziono un menu item, il source e' un menu item. a me serve il
bottone sul quale ho cliccato per fare apparire il menu dal quale ho
selezionato l'item in questione.
ad es.:
tu clicchi col destro sul pulsante X, appare un popup menu, selezioni
la voce "giallo" e il bottone diventa giallo. per fare cio', ti serve
risalire al bottone...


popup e' null...
sciappinando col debugger mi accorgo che, pur essendo il parent null,
l'"invoker" e' proprio l'oggetto che vorrei... ovviamente tale membro
di container non e' possibile ricavarlo... che io sappia.



qualcuno ha mormorato getInvoker ? metodo di JPopupMenu? ebbene si',
e' lui...
ciao, grazie a tutti


Ho fatto delle prove e con questo ottieni quello che ti serve
private Objcet popUpSource(ActionEvent event)
{
        java.awt.Menu mi = (java.awt.Menu) event.getSource();
        // Con questo risali all'oggetto chiamante
        while(mi.getParent() instanceof java.awt.Menu)
                mi = (java.awt.Menu)mi.getParent();
        return mi.getParent();
}



nel mio caso, non so dirti perche', la catena dei parent si interrompe
al popup, che non ha parent... ma ha un invoker.


Ma usi PopupMenu o JPoupMenu?


ops, non ve l'ho detto vero? e' un J...
