mit rechter Maustaste Panelfarbe wechseln

nochGrünHinterOhre

Grünschnabel
Hallo Zusammen,
bin ganz neu in Java...
google heute schon den ganzen Tag nach einer Lösung für ein einfaches Problem, aber ausser Fehlermeldungen erhalte ich nichts:-(
Vielleicht kann mir jemand weiterhelfen?

Ich hab ein einfaches JPanel und möchte mit der rechten Maustaste die Farbe des Panels ändern.

Das Panel erstellen klappt (immerhin)
doch dann mit dem MouseListener kann ich den verschiedenen Beispielen im netzt nicht folgen :-(

ich wäre sehr dankebar, wenn mir jemand weiterhelfen könnte.
DANKE

Claudia

Code:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Color;


public class Versuch {
	public static void main(String[] args) {
		JPanel panel =new JPanel();
		panel.setBackground(Color.GRAY);
		JLabel label= new JLabel ("Versuch 1");
		panel.add(label);
		
		//Rechte Maustaste
		panel.addMouseListener(new MouseListner()  
		{  
		    public void mouseReleased(MouseEvent e)  
		    {  
		        if (e.isPopupTrigger())  
		        {  
		        	panel.setBackground(Color.BLUE); 
		        }  
		    }  
		});  
		
		JFrame fenster = new JFrame("Neues Fenster");
		fenster.add(panel);
		fenster.setVisible(true);
		fenster.pack();

	}

}
 

genodeftest

Erfahrenes Mitglied
Laut JavaDoc, siehe musst du das bei mouseReleased und mousePressed-Events testen, weil das von System zu System variieren kann. Ich habe hier auf einem Linux-System (Gnome 3) z.B. die Funktionalität, dass bei den nativen Gnome-Anwendungen das Popup mit mousePressed-Events anspringt.
 

genodeftest

Erfahrenes Mitglied
1. Weist du, was JavaDoc ist und wo man sie für die Standardbibliothek findet?
2. du hast einen MouseListener geschrieben, in dem die Methode mouseReleased() aufgerufen wird, wenn die Maustaste losgelassen wird. Genauso kannst (musst?) du auch die Methode mousePressed() überschreiben. Denn abhängig von deinem Betriebssystem kann es sein, dass das Popupmenü, auf das isPopupMenuTrigger() anspringt, beim drücken oder loslassen der Maustaste generiert wird.
 

nochGrünHinterOhre

Grünschnabel
das hab ich gelesen aber weiss nicht was das heisst:-( Tut mir leid

bin nicht einmal sicher ob
Code:
public void mouseReleased(MouseEvent e)  
            {  
                if (e.isPopupTrigger())

die richtige Wahl ist...

ich möchte einfach, dass wenn ich mit der rechten Maustaste drauf dücke, sich die Farbe wechselt.
Vielleicht kann mit jemand meinen Code ergänzen?
Wäre mega lieb
Eure Unerfahrene Claudia
 

Fabio Hellmann

Erfahrenes Mitglied
Hi,
das funktioniert schon in der mouseReleased-Methode. Du kannst den Klick der rechten Maustaste schließlich nicht nur über isPopupTrigger abrufen. ;)
Java:
	public static void main(final String[] args) {
		final JFrame f = new JFrame();
		f.setTitle("Test");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		final JPanel panel = new JPanel();
		panel.setBackground(Color.GRAY);
		f.add(panel);
		
		panel.addMouseListener(new MouseListener()
		{
			@Override
			public void mouseReleased(final MouseEvent e) {
				if (MouseEvent.BUTTON3 == e.getButton()) {
					// Rechte Maustaste
					panel.setBackground(Color.BLUE);
				}
			}
			
			@Override
			public void mousePressed(final MouseEvent e) {
			}
			
			@Override
			public void mouseExited(final MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(final MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(final MouseEvent e) {
			}
		});
		
		f.pack();
		f.setVisible(true);
	}

Gruß

Fabio
 

nochGrünHinterOhre

Grünschnabel
Danke Fabio, bist ein Goldschatz!!

nun hab ich nur noch die Fehlermeldung
"Unresolved compilation problem:
MouseListener cannot be resolved to a type"

:-(
bis jetzt hab ich importiert

Code:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Color;

glaube stell mich heute wieder mal ein wenig schwierig an:-( grrr