Zum Inhalt springen

Listener in Verbindung mit Panel und Label


Silizium185

Empfohlene Beiträge

Ich muss schon wieder nerven ;-)

Habe folgendes Problem und zwar habe ich meinem Dialog ein Panel (nennen wir es PannelA) verpasst, dass als Gridlayout fungiert. Es hat auch eine bestimmte Größe, die abhängig von der Anzahl der zu verwaltenden Objekte groß ist. Das Gridlayout von PannelA ist gefüllt mit weiteren Pannels (Komponenten). Diese Pannels verwalten dann schlussendlich Labels.

Nun will ich einen Listener installieren, der auf Mausdruck auf einer Komponente mir sagt, welche Position dieser im Fenster belegt.

Ich hab jeden Mauslistener ausprobiert und jeden anderen Listener (Focuslistener, ComponentListener) der mir für Panel zur Verfügung steht, aber auf keinen Listener reagiert wenn ich auf mein Pannel klicke.

Wie krieg ich mein Programm dazu mir zu sagen, welche eingefügte Komponente an welcher Stelle liegt.

Hoffe ich hab mich nicht alzu umständlich ausgedrückt.

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was heißt denn bei dir dass das Panel nicht auf den MouseListener reagiert?

Wenn du dem JPanel einen MouseListener hinzufügst und den JLabels nicht, dann fängt der Listener alle Mouse-Events ab die innerhalb des JPanels passieren.

Das MouseEvent Objekt dass dir in der Methode übergeben wird, enthält auch Methoden um die Position festzustellen, an der der Mausklick passierte. Und mit dieser Position kannst du über die Methode getComponentAt(int, int) des Panels herausfinden, welche Komponente sich an dieser Position befindet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit Swing arbeite ich noch nicht. Bewege mich momentan nur in AWT.

Also mit: mein "Mouselistener reagiert nicht" meine ich folgendes. Der Mouselistener hat ja drei Methoden.

MouseClicked, MousePressed und MouseReleased. Die hab ich testweise alle mal ganz simpel mit einem System.out.println gefüllt.

Wenn ich dann irgendein Event ausführen will, wird die System.out.println anweisungen nicht durchgeführt.

Ich bin grad unterwegs und würde nachher auch mein Quelltext einfügen, falls uns das weiterbringt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Quelltexte wären dann wahrscheinlich recht hilfreich. Aber ob es diese Funktionen auch bei den AWT Komponenten gibt, weiß ich gerade nicht.

Gibt es denn einen besonderen Grund warum du mit AWT arbeitest?

Es ist zwar schon so, dass Swing auf AWT aufbaut, aber wenn du nicht gerade in einem Projekt mit AWT arbeiten musst, würde ich eher empfehlen, direkt mit Swing weiter zu machen und micht nicht all zu lange mit AWT aufzuhalten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das sind Aufgaben des Studiums und wir stehen kurz vor dem Wechsel auf Swing. Diese Aufgabe soll aber noch mit AWT gelöst werden. Deswegen bin ich noch bei AWT

So hier also mal mein Quelltext


public class myScrollPane extends Dialog

{

	private Studentadmin admin;

	private ScrollPane Sp;

	private Panel Panel2;

	public myScrollPane (StudenteninFensterZeichnenLassen Vaterfenster) 

	// StudenteninFensterZeichnenLassen ist von Frame abgeleitet

	{

		super (Vaterfenster);

		setTitle("Alle Studenten");

		this.admin = Vaterfenster.getAdmin();

		Sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);


		Panel2 = new Panel(new GridLayout(admin.getVektor().size(),1));

		Panel2.addMouseListener(new MouseListener() 

		{

			@Override

			public void mouseReleased(MouseEvent e) 

			{

				System.out.println("Release");

			}


			@Override

			public void mousePressed(MouseEvent e) 

			{

				System.out.println("Pressed");

			}


			@Override

			public void mouseExited(MouseEvent e) 

			{

				System.out.println("Exited");

			}


			@Override

			public void mouseEntered(MouseEvent e) 

			{

				System.out.println("Entered");

			}


			@Override

			public void mouseClicked(MouseEvent e) 

			{

				System.out.println("Clicked");

			}

		});

		// Keiner dieser Listener wird ausgelöst


		for (int i = 0; i<admin.getVektor().size();++i)

		{

			setStudentToLabelAndThanToPanel(i);

		}

		add(Sp);

		Sp.add(Panel2);

		pack();

		setVisible(true);

		addWindowListener(new WindowAdapter() 

		{

			@Override

			public void windowClosing (WindowEvent e)

			{

				dispose();

			}

		});


	}

	private void setStudentToLabelAndThanToPanel(int i)

	{

		Panel Panel1 = new Panel(new GridLayout(7,2)); // Damit für jeden Studenten ein neues Panel angelegt wird. Danach wirds zwar gelöscht,

		// aber danach brauch ich es eh nicht mehr, weil das Panel schon im Hauptfenster integriert ist


		try {

			Panel1.add(new Label("Nachname"));

			Panel1.add(new Label(admin.getVektor().get(i).getNachnameString()));

			Panel1.add(new Label("Vorname"));

			Panel1.add(new Label(admin.getVektor().get(i).getVornameString()));

			Panel1.add(new Label("Matrikelnummer"));

			Panel1.add(new Label(""+admin.getVektor().get(i).getMatrikel()));

			Panel1.add(new Label("Alter"));

			Panel1.add(new Label(""+admin.getVektor().get(i).getAge()));

			Panel1.add(new Label("Studiert"));

			Panel1.add(new Label(""+admin.getVektor().get(i).getStudiengang()));

			Panel1.add(new Label("Bestandene Prüfungen"));

			Panel1.add(new Label(""+admin.getVektor().get(i).getSumme()));

			Panel1.add(new Label(""));

			Panel1.add(new Label(""));


		} catch (HeadlessException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		} catch (OutOfBoundsException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

		Panel2.add(Panel1);

	}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Joa hattest Recht. Wenn ich die Mouselistener den Labels mitgebe, dann reagieren sie einwandfrei.

Na dann muss ich mir was mit den Labels einfallen lassen ;-)

Aber kannst du mir noch sagen, warum ich nur an die Labels rankomme. Die ganzen Grafikkontexte sind übereinander geschachtelt, dass hab ich auch verstanden. Müsste aber Java nicht trotzdem so klug sein, dass er trotz allem mir den Panel ausgeben kann? Java weiß ja, dass sich da ein Panel befindet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

In Swing funktioniert das auch, solange bei den JLabels keine Listener das Event abfangen, werden die MouseEvents auch an die Container weitergeleitet.

In AWT scheint das aber noch nicht zu funktionieren. Das heißt, dort weden die Events wahrscheinlich wirklich nur auf die oberste Komponente geleitet. In deinem Fall sind dass dann die Labels. Dadurch werden aber Listener die auf den Container darunter registriert sind, nicht ausgelöst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...