Veröffentlicht 3. April 200322 j 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:
3. April 200322 j 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.
3. April 200322 j versteh ich nicht ... ich adde einen actionlistener ... ok ... und wie komm ich dann auf die mouse listener?
3. April 200322 j 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.
3. April 200322 j hm, ok. es gibt ne getComponent() methode ... muss mal sehen was die genau zurueck liefert ...
3. April 200322 j 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.
3. April 200322 j 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.
3. April 200322 j 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?
3. April 200322 j 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.
3. April 200322 j 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
3. April 200322 j 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
3. April 200322 j 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!
3. April 200322 j 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
3. April 200322 j if(e.getSource().equals(btn01)) Das finde ich aber trotzdem besser. Weniger Quellcode.
3. April 200322 j 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.
3. April 200322 j 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?
3. April 200322 j 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
3. April 200322 j 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
3. April 200322 j 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?!
3. April 200322 j public void actionPerformed( ActionEvent e ) { JButton temp = (JButton)e.getSource(); if ( temp.getText().equals( "Speichern" ) ) { System.out.println( "JUHUUUU" ); } } so gehts.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.