Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    8

    Attendere un click dal utente

    Salve a tutti

    devo realizare per la scuola un programma che simuli la briscola con 4 giocatori, 2 "umani" e due controllati dal computer

    il mio problema arriva quando devo scrivere il pezzo pricipale: io ho sempre usato gli eventi per far partire dei metodi ora invece ho la necessità di attendere un evento ( il click da parte del giocatore sul bottone della carta)

    in pratica io pensavo ( è solo un idea, non ho ancora realizzato niente per ora ) di fare un array di Giocatori nel ordine in cui devono giocare e un metodo Turno() che contiene un ciclo for con il quale, per ogni giocatore a seconda del tipo, decidere cosa fare: giocare una carta a caso se è del computer o attendere che il giocatore cliccki.

    è una cosa fattibile in maniera semplice o, secondo voi, devo cambiare approccio?

  2. #2
    Dovresti usare i Thread o devi trovare un modo per demandare il controllo senza attendere
    Se posti del codice forse potremo aiutarti in modo migliore

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    8
    grazie per la risposta, in effetti temevo che fosse necessario usare i Thread ma è un po fuori dalle mie conoscenze.
    per ora ho risolto in maniera un po rozza ma efficace: ho un ciclo while che rimane in loop e il click cambia il valore della variabile, esce dal ciclo e fa tutto il necessario.

    codice:
    class grafica extends JFrame implements MouseListener{
        private Briscola b;
        boolean clikkato=true;
        int LivelloClikkato;
    
        public Grafica(Briscola b){
            this.b=b;
            creaGrafica();
    
        }
        
        .....
    
        public int AspettaGiocatore(){
            while(clikkato){
                try {
                Thread.sleep(300);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Grafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            clikkato=true;
            return LivelloClikkato;
        }
    
        public void mouseClicked(MouseEvent e) {
            clikkato=false;
            JLabel tmp=(JLabel)e.getSource();
            LivelloClikkato=tmp.getName();
            System.out.println(tmp.getName());
        }
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
    }

  4. #4
    ci sono un pò di cose del codice da te postato che non mi sono chiare:
    • la variabile LivelloClikkato è di tipo int, quindi dovresti chiaramente fare il casting qui
      codice:
      LivelloClikkato=tmp.getName();
    • se devi attendere la pressione di un bottone ti conviene usare un ActionListener
    • dal codice si capisce che il MouseListener è stato registrato su una JLabel giusto?

    Spiega un pò meglio cosa realmente vuoi fare ^^

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    8
    Originariamente inviato da Naruto 92
    la variabile LivelloClikkato è di tipo int, quindi dovresti chiaramente fare il casting qui
    vero^^

    se devi attendere la pressione di un bottone ti conviene usare un ActionListener
    che differenza c'è ? entrambi catturano il click del mouse, no?

    dal codice si capisce che il MouseListener è stato registrato su una JLabel giusto?
    giusto

  6. #6
    il MouseListener serve per gestire appunto le azioni del mouse
    Ogni componente ha i suoi ascoltatori ad hoc.
    Non è errato associare il MouseListener, ma dovresti associarlo al bottone è quindi diventa una cosa inutile.
    Come ti ho già detto, l'ascoltatore ideale per il bottone è l'ActionListener che cattura la pressione del bottone, oppure l'ItemListener che cattura la pressione e il rilascio di un componente (di solito si usa nelle checkbox e nei radiobutton).
    ecco come potresti implementarlo:
    codice:
    bottone.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent e){
                                //istruzioni 
                        }
               });

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.