Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Come faccio a far comunicare due classi?

    Ciao a tutti, mi sono imbattuto in un progetto in JavFX che a grandi linee fa questo: genera una griglia NxN di tessere coperte e al click dell'utente vengono scoperte riportando un valore random, e questo valore deve andare a sommarsi con un punteggio inizializzato a 0. Ho creato una classe Tessera, una Punteggio e una MainWindow (in cui è contenuta la griglia e il punteggio). Ora la mia domanda è come faccio, quando clicco su una tessera, ad aggiornare il punteggio? I metodi scopri() e copri() sono nella classe tessera quindi non riesco a capire come farlo interagire con il punteggio all'interno del MainWindow.

    Vi sarei davvero grato per un aiuto!

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,559
    Crei una classe che incapsuli lo stato dell'applicazione e salvi un puntatore ad un'istanza unica nei punti in cui ti è necessario nel momento della creazione.
    Stato e interfaccia dovrebbero sempre essere tenuti distinti
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Scusa l'ignoranza in materia, ma cosa intendi per "incapsulare lo stato dell'applicazione"? Magari lo so e il professore ha usato un'altra terminologia ma non credo ahah

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,559
    Ecco un esempio ridotto al minimo
    codice:
    class Main {  
      public static void main(String[] args) {
        Stato st = new Stato(0);
        Tessera t1 = new Tessera(st);
        System.out.println(t1.getValue());
        Tessera t2 = new Tessera(st);
        System.out.println(t2.getValue());
        System.out.println(st.getValue());
        t1.scopri();
        System.out.println(st.getValue());
        t2.scopri();
        System.out.println(st.getValue());
      }
    }
    
    
    class Tessera {
      private final Stato stato;
      private final int value;
      
      public Tessera(Stato stato) {
        this.stato = stato;
        this.value = (int)(Math.random() * 10);
      }
      
      public int getValue() {
          return this.value;
      }
      
      public void scopri() {
        this.stato.scopri(this.getValue());
      }
    }
    
    
    class Stato {
      private int value;
      
      public Stato(int value) {
        this.value = value;
      }
      
      public void scopri(int value) {
        this.value += value;
      }
      
      public int getValue() {
        return this.value;
      }
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Ah ok mi sembra di aver capito, ora devo solo applicarlo alla mia applicazione e ho già un'idea di come implementarlo. Grazie mille!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,083
    Sposto nel forum dedicato a Java.


    Ciao.
    "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

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 © 2019 vBulletin Solutions, Inc. All rights reserved.