Visualizzazione dei risultati da 1 a 9 su 9

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    [JAVA]Data classe che ascolta gli eventi sapere quale bottone si è premuto

    Ciao a tutti,

    ho un dubbio!
    Con il codice sotto riportato come faccio a sapere quale tasto è stato premuto, se "Play" o "Stop"?
    Riesco a sapere quale bottone del mouse è stato premuto(1, 2 o 3) però non riesco a sapere quale tasto (Play/Stop) ha lanciato l'evento.

    Cosa dovrei modificare nella classe AscoltaPulsanti:
    codice:
    System.out.println("Click su "+e.getButton());
    Grazie a chi mi risponderà!

    Roberto

    codice:
    package provaframe;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class ProvaFrame extends JFrame{
    
        public ProvaFrame(){
            super("Ciao");
            this.setSize(200,200);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
            FlowLayout stile=new FlowLayout();
            this.setLayout(stile);
            
            AscoltaMouseFinestra oggMouse=new AscoltaMouseFinestra();
            AscoltaPulsanti oggPulsante=new AscoltaPulsanti();
            JButton play=new JButton("Play");
            JButton stop=new JButton("Stop");
            
            this.addMouseListener(oggMouse);
            this.add(play);
            this.add(stop);
            play.addMouseListener(oggPulsante);
            stop.addMouseListener(oggPulsante);
            
            this.setVisible(true);
            
        }
        
        public static void main(String[] args) {
            new ProvaFrame();
        }
    
     
        
    }
    codice:
    package provaframe;
    
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    
    
    public class AscoltaPulsanti implements MouseListener{
    
        @Override
        public void mouseClicked(MouseEvent e) {
         System.out.println("Click su "+e.getButton());
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
            
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
        
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
          
        }
    
        
    }
    codice:
    package provaframe;
    
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    
    public class AscoltaMouseFinestra implements MouseListener{
    
           @Override
        public void mouseClicked(MouseEvent e) {
          System.out.println("Click");
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
           System.out.println("Mouse schiacciato");
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
           System.out.println("Mouse rilasciato"); 
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
         System.out.println("Mouse entrato");
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
           System.out.println("Mouse uscito");
        }
        
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ai pulsanti aggiungi l'ActionListener... è fatto apposta...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Nella classe AscoltaPulsanti devi implementare anche l'interfaccia ActionListener e li dovrai riscrivere il metodo actionPerformed

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Suggerisco di usare una classe interna anonima, è senz'altro più indicata per questo tipo di operazioni.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Beh se vuole però separare la parte logica dall'interfaccia è meglio continuare come ha fatto lui, altrimenti si, la classe anonima è molto più indicata perché viene azionata in automatico quella che si riferisce al bottone premuto

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Grazie a tutti per le risposte.

    Ho implementatoto l'interfaccia ActionListener nella classe AscoltaPulsanti e ne ho riscritto il metodo


    codice:
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Azione su tasto "+e.paramString());
        }
    inoltre ho aggiunto nel costruttore della classe ProvaFrame:
    codice:
            play.addActionListener(oggPulsante);
            stop.addActionListener(oggPulsante);
    adesso alla pressione dei tasti Play e Stop il risultato è questo:
    Azione su tasto ACTION_PERFORMED,cmd=Play,when=1386856635147,modif iers=Button1
    Azione su tasto ACTION_PERFORMED,cmd=Stop,when=1386856637269,modif iers=Button1

    Domanda:

    c'e' la possibilità di avere solo la stringa Play e Stop a seconda del tasto schiacciato? Che metodo dovrei utilizzare sull'oggetto ActionEvent e al posto di paramString() ?

    Datemi un consiglio:
    Sarebbe più corretto implementare una classe che gestisca il tasto Play e un altro il tasto Stop?
    O quale secondo voi sarebbe la cosa migliore?

    Grazie, Roberto

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Quote Originariamente inviata da robynosse Visualizza il messaggio
    Grazie a tutti per le risposte.
    Datemi un consiglio:
    Sarebbe più corretto implementare una classe che gestisca il tasto Play e un altro il tasto Stop?
    O quale secondo voi sarebbe la cosa migliore?

    Grazie, Roberto
    Se vuoi rischiare di non fare errori implementa la classe anonima direttamente nel metodo addActionListener come ha detto Alex'87 altrimenti se vuoi continuare per questa strada con la classe separata dovrai usare un if e in base al source ricevuto devi vedere quale bottone è stato premuto. Ovviamente avrai tanti if quanti saranno i bottoni, in questo caso 2.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    codice:
    public void actionPerformed(ActionEvent ae) {
       // Ottengo il sorgente (l'oggetto che ha scatenato l'evento)
       JButton cmd = (JButton) ae.getSource();
    
       // Vediamo chi ha sollevato l'evento
       System.out.println( cmd.getText() );
    }

    Ecco due link utili:
    Documentazione di JButton: http://docs.oracle.com/javase/6/docs...g/JButton.html
    Tutorial ufficiale sull'uso dei pulsanti: http://docs.oracle.com/javase/tutori...ts/button.html (raggiungibile dal primo link)

    Ciao.
    Ultima modifica di LeleFT; 12-12-2013 a 17:44
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Grazie a tutti, con i vostri consigli sono arrivato a quello che volevo ottenere!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.