Probleme mit Zeichenoperationen im Applet

timestamp

Mitglied Käsekuchen
Hallo Forum,

ich habe mir eine eigene Contextmenü Funktion geschrieben und habe nun Probleme beim Anzeigen. Bei einem Rechtsklick wird ein JPanel sichtbar gemacht, was dann eine bestimmte Anzahl JLabels beinhaltet.
Das Problem ergibt sich nun dadurch, das alles was dann "unter" dem JPanel liegt nicht mehr neu gezeichnet wird, also einfach verschwindet. Ein Aufruf der repaint() Methode lässt dafür mein Contextmenü verschwinden, was dann erst sichtbar wird, wenn ich mit der Maus über die "unsichtbaren" Schaltflächen fahre.

Java:
public class MyApplet extends JApplet implements Constants, MouseListener{
	Map map;
	JPanel cntxtMenu  = new JPanel();
	ContextMenu cMenu = new ContextMenu(cntxtMenu, "hGerade", "vGerade", "EckeOL", "Ecke OR", "Ecke UR", "Ecke UL", "T-Kreuzung O", "T-Kreuzung R", "T-Kreuzung U", "T-Kreuzung L", "Kreuzung");
	public void init(){
		setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
		setLayout(null);
		map = new Map("");
		map.loadTileSet("../img/streets.ts");
		addMouseListener(this);
		add(cntxtMenu);
		setBackground(new Color(255, 255, 255));
	}  
	public void paint(Graphics g){		
		for( int i = 0; i < 4; i++ ){
			g.drawImage(map.getTileSet().getTile(i), 20, 20+i*55, null);
		}
	  
	}
	public void mouseClicked(MouseEvent e){
		if( e.getButton() == MOUSE_LBUTTON ){
			cMenu.hide();			
		}
		if( e.getButton() == MOUSE_RBUTTON ){			
			cMenu.show(e.getX(), e.getY());					
		}
	}
        //[...]


Java:
public class ContextMenu implements Constants{
	ContextMenuEntry[] entries;	
	JPanel cntxtMenu;
	public ContextMenu(JPanel cntxtMenu, String ...labels){
		this.cntxtMenu = cntxtMenu;
		cntxtMenu.setLayout(null);
		entries = new ContextMenuEntry[labels.length];
		for( int i = 0; i < labels.length; i++ ){
			entries[i] = new ContextMenuEntry(labels[i]);
			entries[i].addMouseListener(entries[i]);
		}
	}
	
	public void show(int x, int y){
		cntxtMenu.setVisible(true);		
		cntxtMenu.setBounds(x, y, 150, 20*entries.length);		
		for( int i = 0; i < entries.length; i++ ){
			entries[i].setLocation(0, i*20);
			cntxtMenu.add(entries[i]);			
		}				
	}		
	
	public void hide(){
		cntxtMenu.setVisible(false);
	}			
}
 
Zurück