# wie erzeuge ich ein Kontextmenü



## newangel85 (19. Juli 2007)

Hallo zusammmen,ich bin java neuling.
Ich hab ein Jlist inder elemente enthalten sind. Nun möchte ich das ich wenn ich ein Element selektiert habe und rechts klick durchführe ein kontextmenu aufgeht wo ich infos zu den element lesen kann.

ich hab leider kein plan wie ich das anstelle. 
für hilfe wäre ich dankbar.


----------



## MeinerEiner_80 (19. Juli 2007)

Moin!
Fuege deiner Komponente einen MouseListener hinzu.
Sobald die rechte Maustaste geklickt wird, zeigst du einfach ein Popup Menu mit dem gewünschten Inhalt an:
Ungefähr so:


```
yourList.addMouseListener(new MouseAdapter() {
        public void mouseReleased(MouseEvent evt) {
            if (evt.isPopupTrigger()) {
                showMenu(evt);
            }
        }
    });
public void showMenu(MouseEvent evt){
   JPopupMenu menu = new JPopupMenu();
   JMenuItem item = new JMenuItem(yourList.getSelectedItem().toString());
   item.addActionListener(yourActionListener);
   menu.add(item);
   menu.show(yourList, evt.getX(), evt.getY()); 
}
```

*grüssle*
MeinerEiner


----------



## zerix (19. Juli 2007)

Hallo,

kann ja sein, dass ich mich irre, aber ich kenne ein Kontextmenu als Popup.
Wie das funktioniert kannst du dir hier anschauen.
http://www.galileocomputing.de/open...14_013.htm#mj59d315beb21c4b92bb78ed7ccd37f484

In dem Buch findest du auch sonst nützliche Informationen zu Java.


MFG

zEriX


Edit: Da war Meiner_Einer schon wieder ein paar Sekunden schneller.


----------



## newangel85 (19. Juli 2007)

Vielen Danke für die Hilfe, ihr seit echt Klasse


----------



## newangel85 (19. Juli 2007)

er zeigt mir bei jList.addMouseListener(new MouseAdapter() ein fehler an das der identifier fehlt.


```
jList.addMouseListener(new MouseAdapter()
    {
      public void mouseReleased(MouseEvent evt)
      {
        if (evt.isPopupTrigger())
        {
          showMenu(evt);
        }
      }
    });
    public void showMenu(MouseEvent evt)
    {
      JPopupMenu jKontent = new JPopupMenu();
      JMenuItem jInfo = new JMenuItem(jList.getSelectedItem().toString());
      jInfo.addActionListener(yourActionListener);
      jKontent.add(jInfo);
      jKontent.show(jList, evt.getX(), evt.getY());
    }
```


----------



## MeinerEiner_80 (19. Juli 2007)

Moin!


> ```
> Info.addActionListener(yourActionListener);
> ```


Hast du denn einen ActionListener mit dem Namen yourActionListener? Falls nein, solltest du das vielleicht ändern...

*grüssle*
MeinerEiner


----------



## newangel85 (19. Juli 2007)

ok aber was schreib ich rein? 

 this? oder new actionlistener?
hab keine ahnung....


hab noch ein fehler in der Zeile

jList.addMouseListener(new MouseAdapter()

zeigt mir das identifier expectet..

danke für die hilfe


----------



## MeinerEiner_80 (19. Juli 2007)

newangel85 hat gesagt.:


> ok aber was schreib ich rein?
> 
> this? oder new actionlistener?
> hab keine ahnung....


Du schreibst da das Objekt rein, welches das Interface ActionListener implementiert und darauf reagieren soll, wenn du auf das PopupMenu klickst..
Wenn du nicht verstehst, was ich da eben geschrieben haben, behaupte ich mal, das dir noch ein paar Grundlagen fehlen. Dann solltest du mal da schauen:
http://www.galileocomputing.de/open...14_004.htm#mj26989b07f26cff8fcd19bbc3d06f6855



> hab noch ein fehler in der Zeile
> 
> 
> jList.addMouseListener(new MouseAdapter()
> ...


Der Code funktioniert bei mir einwandfrei. jList ist ein gültiges Objekt bei dir?
Ansonsten zeig mal den kompletten Code

*grüssle*
MeinerEiner


----------



## zerix (19. Juli 2007)

Zu so grundlegenden Fragen wie vorhin mit dem ActionListener, schau mal in den Link rein den ich gepostet hab. Das wird dir bei den meisten Sachen helfen.

MFG

zEriX


----------



## newangel85 (19. Juli 2007)

```
import com.gevas.config.AppGlobals;
import com.gevas.iniconfig.controller.IniConfigController;
import com.gevas.iniconfig.model.IniFile;
import java.awt.Toolkit;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

/**
 *
 * @author  Ritter
 */
public class JF_AppIniConfigurator extends javax.swing.JFrame
{
  
  private JD_AddConfig m_AddConfig = new JD_AddConfig(this,true);
  
  
  public JF_AppIniConfigurator()
  {
    initComponents();
    initComponentsExtra();
  }
  
  private void initComponentsExtra()
  {
    this.setTitle("AdminTool");
    this.setSize(550, 450);
    this.validate();
    AppGlobals.putInSchema("GUI", "Frame", this);
  }
  
  public void initData()
  {
    logoGevas();
    zentriertePosition();
    refresh();
  }
  
  //Firmenlogo wird eingfügt
  private void logoGevas()
  {
    jl_logo.setIcon(new ImageIcon("D:\\Projekte\\IHK\\AdminTool\\logo\\logo.JPG"));
    jl_logo.validate();
    jl_logo.repaint();
  }
  
  //zentriert den Frame
  private void zentriertePosition()
  {
    int  screen_w =  Toolkit.getDefaultToolkit().getScreenSize().width;
    int screen_h  = Toolkit.getDefaultToolkit().getScreenSize().height;
    int frame_w   = this.getWidth();
    int frame_h   = this.getHeight();
    
    int x = (screen_w - frame_w)/2;
    int y = (screen_h - frame_h)/2;
    
    setLocation(x,y);
  }
  
  /**
   * Füllt die Liste der GUI
   */
  private void addListFileName()
  {
    DefaultListModel m_listModel = new DefaultListModel();
    jList.setModel(m_listModel);
    ArrayList<IniFile> iniFileList = IniConfigController.getInstance().loadIniFiles();
    if(iniFileList.size()==0)
    {
      JOptionPane.showMessageDialog(this, "Liste ist leer, da keine IniFiles vorhanden sind", "Leere Liste", JOptionPane.INFORMATION_MESSAGE);
    }
    else
    {
      for(int i=0;i< iniFileList.size();i++)
      {
        IniFile iniFile = iniFileList.get(i);
        m_listModel.addElement(iniFile);
      }
    }
  }
  
  public void refresh()
  {
    addListFileName();
  }
  
  private void saveList()
  {
    ArrayList<IniFile> iniFileList  = new ArrayList<IniFile>();
    DefaultListModel listModel = (DefaultListModel)jList.getModel();
    for(int i=0; i<listModel.size(); i++)
    {
      IniFile file = (IniFile)listModel.getElementAt(i);
      String pfad = file.getPfad();
      String name = file.getName();
      iniFileList.add(new IniFile(name,pfad));
    }
    IniConfigController.getInstance().setIniFile(iniFileList);
  }

  //hier zeigt er ein Fehler an

  jList.addMouseListener(new MouseAdapter()  {
    public void mouseReleased(MouseEvent evt)
    {
      if (evt.isPopupTrigger())
      {
        showMenu(evt);
      }
    }
  });
  public void showMenu(MouseEvent evt)
  {
    JPopupMenu jKontext = new JPopupMenu();
    JMenuItem jInfo = new JMenuItem(jList.getSelectedValue().toString());
    jInfo.addActionListener(yourActionListener); ==> element was das ereignis auslöst?
    jKontext.add(jInfo);
    jKontext.show(jList, evt.getX(), evt.getY());
  }
```


----------



## MeinerEiner_80 (19. Juli 2007)

Bisserele nachdenken und net nur blind kopieren wäre fein.. 
Die Anweisungen müssen natürlich in ner Methode verpackt werden

*grüssle*
MeinerEiner


----------



## newangel85 (20. Juli 2007)

Tut mir leid aber das hatte ich ja wollte es noch nachträglich einfügen aber irgend wie hat es wohl nicht geklappt.
Jetzt muß ich nur noch ein actionlistener hinzufügen..aber da hab ich mein Probleme.


```
public class JF_AppIniConfigurator extends javax.swing.JFrame
{
  
  private JD_AddConfig m_AddConfig = new JD_AddConfig(this,true);
  
  
  public JF_AppIniConfigurator()
  {
    initComponents();
    initComponentsExtra();
  }
  
  private void initComponentsExtra()
  {
    this.setTitle("AdminTool");
    this.setSize(550, 450);
    this.validate();
    AppGlobals.putInSchema("GUI", "Frame", this);
  }
  
  public void initData()
  {
    logoGevas();
    zentriertePosition();
    refresh();
  }
  
  //Firmenlogo wird eingfügt
  private void logoGevas()
  {
    jl_logo.setIcon(new ImageIcon("D:\\Projekte\\IHK\\AdminTool\\logo\\logo.JPG"));
    jl_logo.validate();
    jl_logo.repaint();
  }
  
  //zentriert den Frame
  private void zentriertePosition()
  {
    int  screen_w =  Toolkit.getDefaultToolkit().getScreenSize().width;
    int screen_h  = Toolkit.getDefaultToolkit().getScreenSize().height;
    int frame_w   = this.getWidth();
    int frame_h   = this.getHeight();
    
    int x = (screen_w - frame_w)/2;
    int y = (screen_h - frame_h)/2;
    
    setLocation(x,y);
  }
  
  /**
   * Füllt die Liste der GUI
   */
  private void addListFileName()
  {
    DefaultListModel m_listModel = new DefaultListModel();
    jList.setModel(m_listModel);
    ArrayList<IniFile> iniFileList = IniConfigController.getInstance().loadIniFiles();
    if(iniFileList.size()==0)
    {
      JOptionPane.showMessageDialog(this, "Liste ist leer, da keine IniFiles vorhanden sind", "Leere Liste", JOptionPane.INFORMATION_MESSAGE);
    }
    else
    {
      for(int i=0;i< iniFileList.size();i++)
      {
        IniFile iniFile = iniFileList.get(i);
        m_listModel.addElement(iniFile);
      }
    }
  }
  
  public void refresh()
  {
    addListFileName();
  }
  
  private void saveList()
  {
    ArrayList<IniFile> iniFileList  = new ArrayList<IniFile>();
    DefaultListModel listModel = (DefaultListModel)jList.getModel();
    for(int i=0; i<listModel.size(); i++)
    {
      IniFile file = (IniFile)listModel.getElementAt(i);
      String pfad = file.getPfad();
      String name = file.getName();
      iniFileList.add(new IniFile(name,pfad));
    }
    IniConfigController.getInstance().setIniFile(iniFileList);
  }
  
  public void getklick()
  {
    jList.addMouseListener(new MouseAdapter()
    {
      public void mouseReleased(MouseEvent evt)
      {
        if (evt.isPopupTrigger())
        {
          showMenu(evt);
        }
      }
    });
  }
    public void showMenu(MouseEvent evt)
    {
      JPopupMenu jKontext = new JPopupMenu();
      JMenuItem jInfo = new JMenuItem(jList.getSelectedValue().toString());
      jInfo.addActionListener(..........?);
      jKontext.add(jInfo);
      jKontext.show(jList, evt.getX(), evt.getY());
    }
```


----------



## zerix (20. Juli 2007)

Das mit dem ActionListener ist wirklich simple. Du hättest nur mal google bemühen müssen. Ich hab es mal getan. Hab ActionListener bei google gesucht und nach nicht einmal 10 Sekunden hatte ich ein gutes Beispiel.
Ich hab dir auch schon gesagt, dass du nur im Link nachschauen musst, den ich gepostet hab, da hat es ca 15 Sekunden gedauert, bis ich was gefunden hab und ich bin über den Index gegangen. Damit du dir die Mühe nicht machen musst hab ich dir mal bei Links gepostet.

http://www.galileocomputing.de/openbook/javainsel6/javainsel_14_005.htm#Xxx999927
http://www.mrunix.de/forums/archive/index.php/t-42313.html


Also ich denke die 25 Sekunden hättest du investieren können, oder nicht?

MFG

zEriX


----------



## newangel85 (20. Juli 2007)

Hab mir jetzt alles durchgelesen und so wie ich das verstanden habe wird ein  ActionListener  mit der Methode addActionListener() an die Objekte angeheftet, die Aktionen auslösen können.
In mein Fall ist das ein element aus meiner JList.

ich hätte das so gedacht:

 jInfo.addActionListener(jList.getSelectedValue()); ==> aber das ist wohl falsch.


----------



## RELAX (21. August 2011)

Das Thema ist zwar alt aber ich schreib hier mal ne Lösung für dein Problem rein.
Also: Ein ActionListener ist eine "methode" (mehr oder weniger) die bei einer Aktion ausgeführt wird.
Versuchs mal damit: 

```
public class JF_AppIniConfigurator extends javax.swing.JFrame implements ActionListener
```

Falls du Eclipse benutzt (was eigentlich der beste Editor ist) sagt er dir dass Du vergessen hast eine Methode zu implementieren.
Diese Methode ist die die das Interface _ActionListener_ vorschreibt.
Das sollte folgende sein:


```
public void actionPerformed(ActionEvent e) {
//dein code der bei aktion ausgeführt werden soll
}
```

In diesem Fall Funktioniert dann

```
GUIitem.addActionListener(this); 
//oder
GUIitem.addActionListener(JF_AppIniConfigurator);
```


----------

