MouseListener funkioniert auf JPanel nicht

MK234

Aktives Mitglied
Hallo,

schreibe gerade an einem Zeichenprogramm, in welchem ein JPanel die sog. Zeichentafel darstellen soll.
Ich habe dem Panel einen MouseListener angehängt, jedoch reagiert es nicht auf MouseEvents (Mausklicks).

Code:
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class AuswahlBox extends Canvas implements ItemListener, MouseListener, MouseMotionListener {

	public Dimension getMinimumSize() {
		return new Dimension(300, 300);
	}
	
	public Dimension getPreferredSize() {
		return getMinimumSize();
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.black);
		g.fillRect(0, 0, 300, 300);
		
	}

	@Override
	public void itemStateChanged(ItemEvent e) {		
		
		if(e.getItem() == "yellow") {					
			System.out.println("yellow wurde gewählt");				
		}
		if(e.getItem() == "red") {
			System.out.println("red wurde gewählt");
		}
		if(e.getItem() == "green") {
			System.out.println("green wurde gewählt");
		}
		if(e.getItem() == "blue") {
			System.out.println("blue wurde gewählt");
		}		
	}

	

	@Override
	public void mouseClicked(MouseEvent arg0) {		
		System.out.println("Maus gedrückt");
	}
	
		
	
}

und

Code:
import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame{	

	public static void main(String[] args) {
		JFrame F = new JFrame("PaintCanvas");
		F.setLayout(new BorderLayout());
		F.setSize(300, 300);
		F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			
		
		JPanel panel = new JPanel();
		AuswahlBox auswahlBox = new AuswahlBox();
		panel.add(auswahlBox);
		panel.addMouseListener(auswahlBox);
		F.add(panel, BorderLayout.CENTER);			
		
		Choice choice = new Choice();
		choice.addItemListener(auswahlBox);
		choice.addItem("yellow");
		choice.addItem("red");
		choice.addItem("green");
		choice.addItem("blue");
		JPanel panel1 = new JPanel();
		panel1.add(choice);
		F.add(panel1, BorderLayout.SOUTH);
		F.setVisible(true);		
	}
	
}


Woran könnte das liegen?
 

MK234

Aktives Mitglied
gerade habe ich es mit AWT getestet, also statt JFrame Frame und statt JPanel Panel benutzt,
funkioniert leider trotzdem nicht.
Ich habe festgestellt, daß der MouseListener funktioniert, wenn ich das JPanel weglasse und dem JFrame den MouseListener zuordne.
Wenn ich das JPanel in das JFrame einfüge, gibt es eine Stelle, welche vom JPanel nicht überdeckt wird, wenn ich dann an dieser Stelle einen Mausklick mache findet ein Event statt, obwohl ich den MouseListener dem JPanel zugeordnet habe.
 

MK234

Aktives Mitglied
Code:
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class AuswahlBox extends Canvas implements ItemListener, MouseListener, MouseMotionListener {

	public Dimension getMinimumSize() {
		return new Dimension(300, 300);
	}
	
	public Dimension getPreferredSize() {
		return getMinimumSize();
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.black);
		g.fillRect(0, 0, 300, 300);
		
	}

	@Override
	public void itemStateChanged(ItemEvent e) {		
		
		if(e.getItem() == "yellow") {					
			System.out.println("yellow wurde gewählt");				
		}
		if(e.getItem() == "red") {
			System.out.println("red wurde gewählt");
		}
		if(e.getItem() == "green") {
			System.out.println("green wurde gewählt");
		}
		if(e.getItem() == "blue") {
			System.out.println("blue wurde gewählt");
		}		
	}

	@Override
	public void mouseDragged(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus bewegt sich");
		
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus gedrückt");
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus kommt");
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus gepresst");
		
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus losgelassen");
		
	}
}


Code:
import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame{	

	public static void main(String[] args) {
		JFrame F = new JFrame("PaintCanvas");
		F.setLayout(new BorderLayout());
		F.setSize(300, 300);
		F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			
		
		JPanel panel = new JPanel();
		AuswahlBox auswahlBox = new AuswahlBox();
		panel.add(auswahlBox);
		panel.addMouseListener(auswahlBox);
		
		F.add(panel, BorderLayout.CENTER);	
		
		Choice choice = new Choice();
		choice.addItemListener(auswahlBox);
		choice.addItem("yellow");
		choice.addItem("red");
		choice.addItem("green");
		choice.addItem("blue");
		JPanel panel1 = new JPanel();
		panel1.add(choice);
		F.add(panel1, BorderLayout.SOUTH);
		F.setVisible(true);		
	}
 

Marco13

Top Contributor
AuswahlBox extends Canvas

Heavyweight Components (also AWT-Components wie Canvas) krallen sich erstmal alle Events. Damit schlag' ich mich auch gerade rum. Verwende stattdessen JComponent. Dort paintComponent statt paint überschreiben.
 

Marco13

Top Contributor
Von einem Lehrer? Falls ja, verweise ihn auf diesen Beitrag

Hallo, Lehrer! Willkommen im Jahr 2011. Lass' deine Schüler mal machen, die kreigen das schon hin.

Die Ursache ist die gleiche: Der Canvas bekommt die MouseEvents, und das Panel (wo der Canvas drin liegt) nicht. Füg' den MouseListener einfach zum Canvas (also zu sich selbst) hinzu
Java:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class Main extends Frame{   

    public static void main(String[] args) {
        Frame F = new Frame("PaintCanvas");
        F.setLayout(new BorderLayout());
        F.setSize(300, 300);
        F.addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
            
        });           
        
        Panel panel = new Panel();
        AuswahlBox auswahlBox = new AuswahlBox();
        panel.add(auswahlBox);
        auswahlBox.addMouseListener(auswahlBox);
        
        F.add(panel, BorderLayout.CENTER);  
        
        Choice choice = new Choice();
        choice.addItemListener(auswahlBox);
        choice.addItem("yellow");
        choice.addItem("red");
        choice.addItem("green");
        choice.addItem("blue");
        Panel panel1 = new Panel();
        panel1.add(choice);
        F.add(panel1, BorderLayout.SOUTH);
        F.setVisible(true);     
    }
}

class AuswahlBox extends Canvas implements ItemListener, MouseListener, MouseMotionListener {

	public Dimension getMinimumSize() {
		return new Dimension(300, 300);
	}
	
	public Dimension getPreferredSize() {
		return getMinimumSize();
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.black);
		g.fillRect(0, 0, 300, 300);
		
	}

	@Override
	public void itemStateChanged(ItemEvent e) {		
		
		if(e.getItem() == "yellow") {					
			System.out.println("yellow wurde gewählt");				
		}
		if(e.getItem() == "red") {
			System.out.println("red wurde gewählt");
		}
		if(e.getItem() == "green") {
			System.out.println("green wurde gewählt");
		}
		if(e.getItem() == "blue") {
			System.out.println("blue wurde gewählt");
		}		
	}

	@Override
	public void mouseDragged(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus bewegt sich");
		
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus gedrückt");
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus kommt");
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus gepresst");
		
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("Maus losgelassen");
		
	}
}

EDIT: Jo, das war knapp....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
H MouseListener klicks begrenzen Java Basics - Anfänger-Themen 4
H MouseListener begrenzen und Speichern Java Basics - Anfänger-Themen 1
V Problem - MouseListener/2DGraphics Java Basics - Anfänger-Themen 2
R Variablen MouseListener funktioniert auf anderen Pcs nur bedingt Java Basics - Anfänger-Themen 6
G MouseListener funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
GRAZZ0R MouseListener - Rechteck Bewegen Java Basics - Anfänger-Themen 1
R Variable Klassenübegreifend MouseListener Java Basics - Anfänger-Themen 0
D MouseListener funktioniert nach Timerstart nicht mehr Java Basics - Anfänger-Themen 9
J MouseListener für Schleifen-Objekte Java Basics - Anfänger-Themen 13
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
S GUI ImageIcon Mouselistener Link Java Basics - Anfänger-Themen 0
P MouseListener funktioniert nicht Java Basics - Anfänger-Themen 6
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Problem mit MouseListener Java Basics - Anfänger-Themen 4
T MouseListener, recht Taste Java Basics - Anfänger-Themen 2
M MouseListener funktioniert nicht Java Basics - Anfänger-Themen 9
E Mouselistener auf jTable Java Basics - Anfänger-Themen 18
B Variablen an MouseListener übergeben Java Basics - Anfänger-Themen 5
H MouseListener für ein eingefügtes Bild in einem JFrame Java Basics - Anfänger-Themen 7
H Mouselistener bei JTable Java Basics - Anfänger-Themen 4
G MouseListener für mehrere Buttons Java Basics - Anfänger-Themen 11
J MouseListener fuer gezeichnete Polyline Java Basics - Anfänger-Themen 3
L Label + MouseListener Java Basics - Anfänger-Themen 12
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M Schiebepuzzle: MouseListener und Graphics? Java Basics - Anfänger-Themen 6
M MouseListener Java Basics - Anfänger-Themen 2
kitz MouseListener Java Basics - Anfänger-Themen 8
B MouseListener & Graphics Java Basics - Anfänger-Themen 10
D Problem mit Mouselistener und jtable Java Basics - Anfänger-Themen 7
C fragen zu MouseListener Java Basics - Anfänger-Themen 3
M MouseListener funktioniert in jar-file nicht mehr Java Basics - Anfänger-Themen 13
F Logikproblem: Auf Mouselistener warten Java Basics - Anfänger-Themen 6
E Auf Mouselistener warten?! Java Basics - Anfänger-Themen 20
S Probleme mit 2 mouselistener Java Basics - Anfänger-Themen 6
A Frage zu MouseListener Java Basics - Anfänger-Themen 2
D Mouselistener Java Basics - Anfänger-Themen 2
A jPanel an MouseListener übergeben? Java Basics - Anfänger-Themen 2
S Swing JEditoPane MouseListener Java Basics - Anfänger-Themen 5
M Mouselistener Java Basics - Anfänger-Themen 4
S MouseListener funzt net. Java Basics - Anfänger-Themen 5
G MouseListener double click? Java Basics - Anfänger-Themen 1
V MouseListener Java Basics - Anfänger-Themen 5
M MouseListener Java Basics - Anfänger-Themen 3
N Mouselistener? Java Basics - Anfänger-Themen 5
T ein MouseListener pro Objekt sinnvoll? Java Basics - Anfänger-Themen 4
F MouseListener - Unhandled IOException Java Basics - Anfänger-Themen 2
U MouseListener Java Basics - Anfänger-Themen 2
L Array von Buttons, jeder soll MouseListener haben Java Basics - Anfänger-Themen 5
S MouseListener - Events auf Mouseklick Java Basics - Anfänger-Themen 14
L MouseListener Problem. Java Basics - Anfänger-Themen 2
S mouselistener Java Basics - Anfänger-Themen 3
N MouseListener Java Basics - Anfänger-Themen 2
J MouseListener implementieren Java Basics - Anfänger-Themen 12
P MouseListener wird anscheinend nicht benutzt Java Basics - Anfänger-Themen 12
N MouseListener - reagiert zu spät Java Basics - Anfänger-Themen 3
D JList - Textzeilen MouseListener zuweisen Java Basics - Anfänger-Themen 4
M prüfen ob mouselistener gesetzt ist. Java Basics - Anfänger-Themen 10
O image und mouseListener Java Basics - Anfänger-Themen 15
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
P Kann keinen MouseListener hinzufügen Java Basics - Anfänger-Themen 3
G MouseListener einbauen - wie? Java Basics - Anfänger-Themen 4
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
A Iterator, wie funkioniert das richtig? Java Basics - Anfänger-Themen 6
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Ein mit UI-Designer erstelltes JPanel einblenden Java Basics - Anfänger-Themen 0
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
Zeppi JPanel responsive Grid Java Basics - Anfänger-Themen 0
J JPanel in JScrollPanel Java Basics - Anfänger-Themen 4
Elyt JPanel als HintergrundBild Java Basics - Anfänger-Themen 7
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
O Swing JPanel Java Basics - Anfänger-Themen 4
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
S JPanel wird nicht angezeigt Java Basics - Anfänger-Themen 1
D Animation JPanel Java Basics - Anfänger-Themen 1
M JLabels "verrutschen" beim übergeben von JPanel Java Basics - Anfänger-Themen 2
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
Y Webinhalt JPanel Java Basics - Anfänger-Themen 6
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
S JPanel variablenabhängig erstellen Java Basics - Anfänger-Themen 13
J Methoden Dinge auf einem JPanel paltzieren Java Basics - Anfänger-Themen 1
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
J Probleme mit eigenem JPanel (IDE Eclipse) Java Basics - Anfänger-Themen 4
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben