Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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]
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();
...
}
Die Einträge des PopupMenüs enthalten quasi Textbausteine. Bei Klick auf ein Item soll der entsprechende Baustein in das entsprechende Textfeld übernommen werden.
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.