shad0w Geschrieben 3. April 2003 Geschrieben 3. April 2003 Hi, in der buechern steht ja alles beschrieben, wie man nen mouselistener programmiert etc. und das ist eigentlich auch kein problem ... aber: was wenn ich mehrere komponenten habe? muss ich dann fuer jeden button nen eigenen mouselistener schreiben? d.h. fuer jeden button ne eigene klasse?? :confused: Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Naja, du könntest auf die Source abfragen und den dementsprechendden Code ausführen. z.B. Du hast mehrere Buttons und addest auf diese nur einen ActionListener. Von dem Event welches du übergibst kannst du dir die Source geben lassen und hast den entsprechenden Button. Zitieren
shad0w Geschrieben 3. April 2003 Autor Geschrieben 3. April 2003 versteh ich nicht ... ich adde einen actionlistener ... ok ... und wie komm ich dann auf die mouse listener? Zitieren
ETnachHause Geschrieben 3. April 2003 Geschrieben 3. April 2003 Ich glaube er meinte auch die MouseListener. Du schreibst einen MouseListener, addest ihn zu Deinen Komponenten und kannst dann im MouseEvent mit getSource() oder so ähnlich abfragen, von welcher Deiner Komponenten dieses Event kommt und dementsprechend handeln. Zitieren
shad0w Geschrieben 3. April 2003 Autor Geschrieben 3. April 2003 hm, ok. es gibt ne getComponent() methode ... muss mal sehen was die genau zurueck liefert ... Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Originally posted by ETnachHause Ich glaube er meinte auch die MouseListener. Du schreibst einen MouseListener, addest ihn zu Deinen Komponenten und kannst dann im MouseEvent mit getSource() oder so ähnlich abfragen, von welcher Deiner Komponenten dieses Event kommt und dementsprechend handeln. Genau DAS hatte ich gemeint. Nur als Beispiel hatte ich dann nen ActionListener genommen. MouseEvent.getSource liefert dir ein Object, welches du dann entsprechend casten kannst. Und darauf machst du deine Abfrage. Zitieren
shad0w Geschrieben 3. April 2003 Autor Geschrieben 3. April 2003 Hi, getComponent() und getSource() ist das gleiche. Ich hab mir grad mal die Strings ausgeben lassen, jedoch kann ich keinen bezug finden, woran ich erkenne, dass ich jetzt den Submit und nicht den Cancel button geklickt habe. getComponent().getName() liefert null zurueck. und casten kann ich auch noch nicht. Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Also du hast ein EVENT e. Dann holst du dir die Source von dem Event. (evtSource = e.getSource) Dann überprüfst du, ob die Source überhaupt eine Instanz von Button ist. ( if(evtSource instanceOf Button) {// hier geht´s dann weiter} ) Dann castest du die "evtSource" in einen Button. (btnButton = (Button) evtSource)) So, und von dem kannst du dir z.B. den Text geben lassen. Darauf kannst du wieder abfragen und bekommst so deinen SubmitButton raus. OK? Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Besser ist natürlich das hier! JButton btn01 = new JButton("Button 01"); JButton btn02 = new JButton("Button 02"); JButton btn03 = new JButton("Button 03"); btn01.addActionListener(action); btn02.addActionListener(action); btn03.addActionListener(action); private final AbstractAction action = new AbstractAction() { public void actionPerformed(ActionEvent ae) { JButton btn = (JButton)ae.getSource(); if(btn == btn01) System.out.println("Button 01 gedrueckt."); else if(btn == btn02) System.out.println("Button 02 gedrueckt."); else if(btn == btn03) System.out.println("Button 03 gedrueckt."); }}; Der Rest für den MouseListener ist dann äquivalent. Zitieren
Jaraz Geschrieben 3. April 2003 Geschrieben 3. April 2003 Originally posted by Peeter if(btn == btn01) System.out.println("Button 01 gedrueckt."); Kleine Bemerkung am Rande, Objekte sollte man mit .equals vergleichen. if(btn.equals(btn01)) System.out.println("Button 01 gedrueckt."); Gruß Jaraz Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Originally posted by Jaraz Kleine Bemerkung am Rande, Objekte sollte man mit .equals vergleichen. if(btn.equals(btn01)) System.out.println("Button 01 gedrueckt."); Gruß Jaraz Verdammt. Natürlich hast du recht.*schäm* Aber funktionieren tut´s trozdem.:mod: Peet Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 DAS ist wirklich gut. :uli Geht. Ich hab´s mal schnell getestet. Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Originally posted by Jaraz Ich bin zu blöd zum editieren. WOW, das gibt von mir noch mal ein fettes :uli von mir! if(e.getSource().equals(btn01)) So, hier nochmal! Zitieren
Jaraz Geschrieben 3. April 2003 Geschrieben 3. April 2003 Originally posted by Peeter if(e.getSource().equals(btn01)) Das geht aber auch mit ==, deswegen hatte ich meinen Beitrag gelöscht. So, habe nochmal nachgeprüft. == vergleicht Referenzen. Da bei getSource() die Referenz von dem Button geliefert wird, kann man das da doch nehmen. Mein Einwand war also falsch. Wenn man 2 verschiedene Objekte auf inhaltliche Gleiheit überprüfen will, muss man equals nehmen. z.B String s1 = new String("test"); String s2 = new String("test"); s1 == s2 liefert false s1.equals(s2) liefert true Gruß Jaraz Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 if(e.getSource().equals(btn01)) Das finde ich aber trotzdem besser. Weniger Quellcode. Zitieren
Jaraz Geschrieben 3. April 2003 Geschrieben 3. April 2003 if(e.getSource()==btn01) Noch weniger!!! Gruß Jaraz Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Gut, aber nun reicht´s. Man könnte natürlich die Variablen noch ein bisschen kürzen. if(e.getSource()==b1) So, ich glaub das Problem ist gelöst. Zitieren
shad0w Geschrieben 3. April 2003 Autor Geschrieben 3. April 2003 funtzt aber net. private JButton jbSubmit = new JButton("Speichern"); public void mouseClicked(MouseEvent e) { if ( e.getSource() == jbSubmit ) { System.out.println("JUHUUUU"); } } was stimmt da net? Zitieren
Jaraz Geschrieben 3. April 2003 Geschrieben 3. April 2003 private JButton jbSubmit = new JButton("Speichern"); [B]jbSubmit.addMouseListener(this);[/B] public void mouseClicked(MouseEvent e) { if ( e.getSource() == jbSubmit ) { System.out.println("JUHUUUU"); } } Außerdem muss die Klasse das Interface MouseListener implementieren Gruß Jaraz Zitieren
Peeter Geschrieben 3. April 2003 Geschrieben 3. April 2003 Nimmt man da nicht für nen JButton trotzdem nen ActionListener? :confused: Oder willst du auf einen MouseKlick was anderes machen, als per Tastendruck? Ansonsten reicht nämlich ein normaler ActionListener auf einem Button. Peet Zitieren
shad0w Geschrieben 3. April 2003 Autor Geschrieben 3. April 2003 hm, ok. ich brauche keinen mouselistener ... hab auch schon alles auf actionlistener umgebaut, aber es funtzt trotzdem noch nicht. vllt. sollte ich noch dazu sagen, dass der action listener nicht in der gleichen klasse ist, wie die buttons?! Zitieren
shad0w Geschrieben 3. April 2003 Autor Geschrieben 3. April 2003 public void actionPerformed( ActionEvent e ) { JButton temp = (JButton)e.getSource(); if ( temp.getText().equals( "Speichern" ) ) { System.out.println( "JUHUUUU" ); } } so gehts. Zitieren
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.