Silizium185 Geschrieben 26. August 2011 Teilen Geschrieben 26. August 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 26. August 2011 Teilen Geschrieben 26. August 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Silizium185 Geschrieben 26. August 2011 Autor Teilen Geschrieben 26. August 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 26. August 2011 Teilen Geschrieben 26. August 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Silizium185 Geschrieben 26. August 2011 Autor Teilen Geschrieben 26. August 2011 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); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Al-Bundy Geschrieben 28. August 2011 Teilen Geschrieben 28. August 2011 Deine Mouseaktionen landen auch nicht auf dem Panel, sondern auf den Labels. Die Komponenten werden ja alle übereinander gelegt und der Mouseaktionen landet nur bei der obersten Komponente, d.h. du musst deinen Listener (auch) an die Labels hängen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Silizium185 Geschrieben 29. August 2011 Autor Teilen Geschrieben 29. August 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 29. August 2011 Teilen Geschrieben 29. August 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.