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

    Creare e ascoltare eventi

    Buongiorno a tutti.

    Ho delle difficoltà a comprendere il concetto della creazione di eventi.
    Mi spiego meglio.

    Ho una classe Main che mi crea una seconda classe che estende JFrame e che sarà l'interfaccia grafica del programma.

    All'interno della classe Main, tramite un Timer ciclicamente vado ad interrogare un database.
    Il dato che leggo dal database lo devo visualizzare all'interno di una JLabel all'interno del JFrame.
    Quando il dato che leggo dal database è diverso da quello che ho letto la volta precedente, devo aggiornare la JLabel in modo che mi visualizzi sempre il dato aggiornato.

    Per fare ciò, se ho compreso bene dovrei, all'interno del codice del Timer, attivare un evento quando la variabile risulta diversa dalla lettura precedente.

    Allo stesso tempo, quando creo il JFrame, questi deve rimanere in ascolto per intercettare l'evento creato dalla classe Main ed aggiornare il JLabel.

    Ora...
    Mi occorre sapere se il mio ragionamento è corretto e, nel caso in cui lo sia. Potete indicarmi che oggetti utilizzare e dove documentarmi?
    Un paio di righe di codice d'esempio per capire da dove iniziare ed avrete la mia eterna gratitudine

    Grazie infinite per l'attenzione,

  2. #2

    Re: Creare e ascoltare eventi

    Originariamente inviato da LupusImprobus
    Il dato che leggo dal database lo devo visualizzare all'interno di una JLabel all'interno del JFrame.
    Quando il dato che leggo dal database è diverso da quello che ho letto la volta precedente, devo aggiornare la JLabel in modo che mi visualizzi sempre il dato aggiornato.
    Non credo tu abbia bisogno di implementare ascoltatori di eventi ed intercettarli.
    In questo caso ti basta invocare sulla tua istanza di JLabel il metodo setText.
    Questo vale se le tue modifiche sono di carattere testuale.

  3. #3
    Grazie per la risposta.

    Infatti per ora ho risolto inserendo nel codice del Timer, il richiamo ad una funzione presente nel JFrame che mi aggiorna la JLabel. E per il momento funziona

    Però mi sembra un sistema piuttosto rozzo soprattutto perché, nel caso in cui andassi a chiudere il JFrame mi troverei a richiamare una funzione inesistente. Oltre a ciò, se dovessi visualizzare quella variabile all'interno di altre classi, utilizzando questo metodo, sarei costretto a modificare sempre il codice del Timer piuttosto che aggiungere un ascoltatore alla nuova classe.

    Non è questo il caso ma desidero capire come fare a creare un evento in modo tale da non avere errori nel caso in cui andassi a chiudere un JFrame e ne liberassi la memoria. Con questo sistema avrei un errore in quanto il Timer andrebbe a puntare ad una classe non inizializzata.

    Sono tutt'altro che un esperto e potrei aver utilizzato termini inappropriati ma spero d'aver espresso il concetto in modo chiaro.

    Grazie ancora per l'attenzione e soprattutto per la pazienza.

  4. #4
    Originariamente inviato da LupusImprobus
    Non è questo il caso ma desidero capire come fare a creare un evento in modo tale da non avere errori nel caso in cui andassi a chiudere un JFrame e ne liberassi la memoria. Con questo sistema avrei un errore in quanto il Timer andrebbe a puntare ad una classe non inizializzata.
    In questo caso il WindowListener dovrebbe fare al caso tuo. Quindi ridefinendo opportunamente il metodo che gestisce l'evento di chiusura del frame, fai in modo che il Timer venga a conoscenza del fatto che quel frame non esiste più e quindi cessa di fare determinate operazioni.

  5. #5
    Perfetto...

    Ho fatto quanto mi avete detto e funziona.
    Ora la classe Timer conosce esattamente lo stato dei JFrame e agisce di conseguenza.

    Mi rimane però un dubbio.
    Se io volessi creare un evento al variare di una variabile e lasciare ad altre classi la possibilità di intercettarlo?
    In pratica:
    L'oggetto Timer va a leggere nel PLC lo stato di una variabile circa ogni 500ms.
    Se lo stato della variabile è diverso dalla lettura precedente genero un evento.
    Se non esistono oggetti in ascolto, questo evento rimane inascoltato.
    A quel punto io posso creare quanti oggetti desidero e valutare di volta in volta se mi interessa mettermi in ascolto di quello specifico evento.
    In questo modo, la classe Timer non verrebbe modificata ma mi troverei ad abilitare l'ascoltatore nelle nuove classi solo nel caso in cui mi servisse.
    Mi pare un po' come l'utilizzo di un pulsante. Io lo premo e questi genera un evento. Se io non ho creato un ascoltatore accade nulla. Come non vado a modificare la classe del JButton potrei non modificare la classe Timer ma solo l'ascoltatore.

    Spero di non aver detto castronerie e nel caso, non preoccupatevi di ferire la mia sensibilità facendomelo notare

    Desidero solo togliermi questo dubbio.
    Grazie ancora.

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.