PopupMenu; Welches Menü war's denn nun?

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

Gast

Gast
Hallo zusammen,

ich habe zwei Textfelder. Rechter Mausklick auf die Textfelder lässt ein Menü aufpoppen. Die Menüeinträge rekrutieren sich aus Textdateien. Jedem Textfeld ist demnach eine Datei zugeordnet.:

Code:
    private void buildPopUp(File f, MouseEvent evt) {
       try {
          String zeile;
          BufferedReader br = new BufferedReader(new FileReader(f));
          JPopupMenu popup = new JPopupMenu();
          JMenuItem mi = new JMenuItem();
          while ((zeile = br.readLine()) != null) {
             mi = new JMenuItem(zeile);
             mi.addActionListener(this);
             popup.add(mi);
          }
          br.close();
          popup.show(evt.getComponent(),evt.getX(),evt.getY());
       }
   }


Funzt ganz prima. Nun kann ich mit



Code:
    public void actionPerformed( ActionEvent evt ) {
              System.out.println(evt.getActionCommand());
   }

zwar rauskriegen, welchen Text der angeklickte Menüpunkt repräsentiert, leider weiß ich aber nicht, welchem Textfeld das Menü zugeordnet ist. Ich hoffe, daß war einigermaßen verständlich.

THX für jeden Tip
 
Du mußt jedem Menuitem einen eindeutigen Actioncommand zuweisen:
Code:
private void buildPopUp(File f, MouseEvent evt, String actionCommand) 
	{
		   try 
		   {
			  String zeile;
			  BufferedReader br = new BufferedReader(new FileReader(f));
			  JPopupMenu popup = new JPopupMenu();
			  JMenuItem mi = new JMenuItem();
			  while ((zeile = br.readLine()) != null) 
			  {
				 mi = new JMenuItem(zeile);
				 mi.addActionListener(this);
				 mi.setActionCommand( actionCommand  );
				 popup.add(mi);
			  }
			  br.close();
			  popup.show(evt.getComponent(),evt.getX(),evt.getY());
		   }
	}
	   
	public void actionPerformed( ActionEvent evt ) 
	{				 
		String s = evt.getActionCommand();
		if (s.equals("cmd_txt_1"))
		{	
			System.out.println("Textfeld 1");
		}
		else if (s.equals("cmd_txt_2"))
		{	
			System.out.println("Textfeld 2");
		}
	 }
 
Das ist nicht schlecht. Jetzt weiß ich zwar, welches Menü gemeint ist bzw. welchem Textfeld es zuzuordnen ist, aber wie bekomme ich heraus, welcher Eintrag angeklickt wurde. Da die Einträge aus Zeilen einer Textdatei geladen werden, weiß ich beim Erstellen des Menüs nicht, wie die Einträge lauten. Nach dem expliziten Zuweisen des ActionCommand ist das so nicht mehr möglich, da ich ActionCommand jetzt nehme, um festzustellen welches Menü das Event ausgelöst hat ???:L ???:L[/b]
 
Was genau ist denn das Ziel des ganzen? Was für Einträge stehen in der Textdatei? Und was soll passieren wenn ein JMenuItem angeklickt wurde?
 
Alles in den Action-String zu stecken scheint nicht zu gehen. Erstell doch eine Unterklasse von JPopupMenu und speichere dortdrin alle wichtigen Infos:

Code:
public class TextMenu extends JPopupMenu{
  private JTextField textField;
  private int informationBlupp;
  private String argumentSowieso;
  ...
}

Dann musst du in der actionPerformed nur noch wissen, welches Menu offen ist (irgendwo eine Variable anlegen...), und kannst es all die Infos abfragen.

Code:
public void actionPerformed( ActionEvent e ){
  TextMenu menu = ... // das wurde in irgendeiner Variable gespeicher
  String a = menu.getArgumentSowieso();
  ...
}
 
foobar hat gesagt.:
Was genau ist denn das Ziel des ganzen? Was für Einträge stehen in der Textdatei? Und was soll passieren wenn ein JMenuItem angeklickt wurde?

Die Einträge des PopupMenüs enthalten quasi Textbausteine. Bei Klick auf ein Item soll der entsprechende Baustein in das entsprechende Textfeld übernommen werden.
 
Beni hat gesagt.:
(irgendwo eine Variable anlegen...), und kannst es all die Infos abfragen

Das ist zwar kein schöner Programmierstil, aber es scheint mir eine sehr pragmatische Lösung. Zumindest kann ich dann mit getActionCommand ganz easy den Text des Menüeintrags abfragen und an das Textfeld weiterleiten.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben