# JPanel und ein PopupMenu



## Grey_M (15. Dez 2007)

Guten Tag,

ich habe mich zu tode  :### , blöd  :autsch:  und weis trotzdem nicht wieso es bei mir  :bahnhof: aussieht...

Ich will eigentlich nur bei einem Linksklick auf ein JPanel ein JPopupMenu öffnen, doch aus irgendwelchen gründen klappt es nicht...

Im folgenden meine Klassen.

Die Main Klasse

```
package Initialisation;

import Frames.Taskbar;

public class Initialisation {
	public static void main(String[] args){
		new Taskbar();
	}
}
```

Das Fenster

```
package Frames;

import java.awt.Toolkit;
import javax.swing.JWindow;

import Components.Controlpanel;

public class Taskbar extends JWindow {
	public Taskbar() {
		
		this.add(new Controlpanel());
		
		
		this.setSize((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(), 40);
		this.setAlwaysOnTop(true);
		this.setVisible(true);
	}

}
```

Das Panel

```
package Components;

import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Controlpanel extends JPanel {
	Color backgroundcolor = new Color(0, 0, 0);
	
	boolean loadbackground = false;
	ImageIcon backgroundicon = null;
		
	public Controlpanel(){		
		this.setLayout(new FlowLayout(0, 0, 0));
		
		if(loadbackground){
			backgroundicon = new ImageIcon("background.jpg");
			if(backgroundicon != null || backgroundicon.getIconWidth() != Toolkit.getDefaultToolkit().getScreenSize().getWidth()){
				JLabel backgroundlabel = new JLabel();
				backgroundlabel.setIcon(backgroundicon);
				this.add(backgroundlabel);
				this.setSize(backgroundicon.getIconWidth(), backgroundicon.getIconHeight());
			}
		}
		else{
			this.setBackground(backgroundcolor);
			this.setSize(18, 18);
		}
		this.addMouseListener(new PopupListener(new PopupMenu()));		
	}
}
```

Das PopupMenu

```
package Components;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

public class PopupMenu extends JPopupMenu{
	public PopupMenu(){		
		add(new JMenuItem("Ordner hinzufügen"));
		add(new JMenuItem("Verknüpfung hinzufügen"));
	}
}
```

Der Listener

```
package Components;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPopupMenu;


public class PopupListener extends MouseAdapter {
	private final JPopupMenu popupmenu;
	
	public PopupListener(JPopupMenu popupmenu){
		this.popupmenu = popupmenu;
	}
	
    public void mouseReleased(MouseEvent e) {
    	 if (e.isPopupTrigger()) {
         	System.out.println("...");
         	popupmenu.show(e.getComponent(), e.getX(), e.getY());
         }
    }
    
}
```

Ich weis wirklich nicht weiter.  :bahnhof: Es gibt keine komplizierten Stellen und mit nem JTree hat es letztens auch wunderbar geklappt. Ich glaub langsam meine JDK und Eclipse starten eine Revolution....

Danke fürs lesen und antworten.


----------



## Grey_M (15. Dez 2007)

Ach übrigens noch.
Ich Listener habe ich ein


```
System.out.println("...")
```

Das gibt er auch erfolgreich aus. Nur dann beim anzeigen des PopupMenu stimmt etwas nicht...


----------



## Grey_M (15. Dez 2007)

Ich bin auf das Ergebnis gekommen, dass ein PopupMenu nicht in einem JWindow funktioniert. Macht man aus JWindow ein JFrame, so funktioniert es.  :meld: 

Die selbe Obtik wie im JWindow kriegt man dann mit

jframe.setUndecorated(true)

Ist doch alles blöd....   :roll:


----------



## Wildcard (15. Dez 2007)

Hört sich für mich eher nach einem Heavyweight/Lightweight Problem an.


----------



## Grey_M (15. Dez 2007)

So kann man das auch bezeichnen, aber wieso steht das nirgendwo beim JWindow bzw. wieso funktioniert dann JFrame?
Beide leiten vom awt.Window ab...


----------



## Wildcard (15. Dez 2007)

Was ist denn deine oberste JComponent?
Das Popup-Menü schonmal auf Heavyweight gestellt?
Das JWindow verwendet AFAIK keine GlassPane, das könnte beispielsweise die Ursache sein.


----------



## Grey_M (15. Dez 2007)

Die Sache hat sich für mich erledigt. Ich habe ein JFrame verwendet und damit war alles erledigt. =)

Bin nun offen für neue Probleme. ???:L


----------

