|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#101 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Per inserire i valori basta infilarli nella collezione di decibel usata per costruire l'audiogramma. Ora è:
Codice:
Collection<Decibel> decibel = Utils.creaInsiemeDecibel( null, 10, 15, 20, 25, 30, 40, 50, 55, 60, 70, 80, 90, 100); Codice:
Collection<Decibel> decibel = Utils.creaInsiemeDecibel( null, 5, 10, 15, 20, 25, 30, 35, 40, 45, eccetera Nota che PainterAudiogramma è incompleto: manca, in particolare, un metodo che consenta di calcolare le dimensioni del componente a partire dai dati dell'audiogramma e un insieme di attributi di rendering (font, altezza delle righe, larghezza delle colonne eccetera). Ora c'è un forfait di 600x600 pixel ma quella misura va tolta e determinata dinamicamente. Comunque conta avere un'idea della struttura del programma che, tra l'altro, è solo una delle possibili.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#102 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Ho modificato le caselle combinate in modo da poter scegliere tutti i multipli di 5 ma in questo modo mi compaiono anche sulla griglia i vari 5, 15, 35, 45... che non devono esserci. Adesso comunque sto leggendo i tuoi appunti e sono arrivato alla spiegazione del Paintergriglia per cercare di capire come modificarla
Negli appunti ho trovato cose del tipo PERDITA IN DECIBEL H W (0, 0) x=w/2 wd hd FREQUENZA Hz x=w/2 125 250 500 ... Wf Non riesco a capire cosa significa questa lista |
|
|
|
|
|
#103 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Sono coordinate o dimensioni o etichette.
Prendi il disegno di pagina 36. Il rettangolo con dentro la scritta "PERDITA IN DECIBEL" rappresenta l'etichetta "PERDITA IN DECIBEL" che si vede sul disegno che hai incollato nel forum. Il valore (0, 0) collegato con una freccia nera all'angolo superiore sinistro dell'etichetta "PERDITA IN DECIBEL" sta a significare che a quell'angolo superiore sinistro corrisponderà il punto di coordinate (0, 0)... Azz. Mi sono accorto solo adesso che Open Office m'ha sballato tutti i disegni. Ma vaff... Aspetta che li metto a posto...
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#104 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Oook. Fatto
pdf aggiornato Ora che le etichette corrispondono alle linee di quotatura e le che le linee di quotatura corrispondono agli spazi, la cosa dovrebbe essere comprensibile
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#105 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Mitico grazie
|
|
|
|
|
|
#106 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Due domande:
Thanks |
|
|
|
|
|
#107 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
la notazione
tipo...nome indica un vararg. Un vararg è un parametro a lunghezza variabile. Dire int...values significa che il metodo può ricevere come argomento un numero variabile (da zero a n) di valori di tipo int. E' più che altro una comodità sintattica. Ho creato i tipi Decibel e Frequenza per una questione di significato. Quelle cose lì rappresentano decibel e frequenze. Stante il nome, è difficile che la cosa sfugga. C'è una teoria delle scienze cognitive dietro a questo essere così espliciti. Questa teoria dice che l'acquisizione di conoscenza di un fenomeno richiede meno concentrazione da parte di un essere umano se il fenomeno è costruito in modo tale da suggerire, in tutto o in parte, il proprio significato. E' chiamata memoria esterna e spiega come fa un cervello da meno di 1 gigabit a sapere tutto quello che sa. Ma questa è un'altra storia...
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#108 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Perchè valoriDecibel e valoriFrequenze sono definiti HashSet e perchè devo ordinare questi valori quando li vado a prelevare per costruirmi il pannello inserimento dati ?
Perchè hashset è un insieme non ordinato di oggetti ? Thanks |
|
|
|
|
|
#109 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Esatto. Ordino i valori perchè l'hashset non è ordinabile.
Uso HashSet nell'audiogramma perchè questo tipo di struttura dati ha un tempo di accesso ai suoi elementi per lo più costante. In pratica se voglio sapere se il Decibel X esiste nell'hashset otterrò una risposta il cui tempo di esecuzione non dipende da quanti Decibel ho già inserito nella struttura dati. Dato l'esiguo numero di elementi trattati dall'audiogramma ed il tipo di manipolazioni richieste non penso che si noterebbe la differenza tra un hashset, con accesso O(1), e una lista, con accesso O(n). Ma ci sono abitudini maturate in diversi contesti che uno trasferisce più o meno consapevolmente in ogni software che scrive.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#110 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Ok ho capito grazie.
Non ho mai visto questa sintassi, cioè dopo il costruttore parentesi graffe e altro codice . Negli appunti tu parli di campi ? Ho cercato in rete ma non ho trovato nulla Codice PHP:
|
|
|
|
|
|
#111 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
La forma citata è, per la parte a destra dell'uguale, la creazione di un'istanza di una classe interna [NON locale] anonima che concretizza un'interfaccia.
ActionListener è un'interfaccia. Sai che non si può dire: ActionListener x = new ActionListener(); Perchè un'interfaccia non è istanziabile. Se alle parentesi tonde fari seguire quelle graffe: ActionListener x = new ActionListener() {}; il compilatore interpreta la cosa come: Codice:
class Anonima implements ActionListener {
};
ActionListener x = new Anonima();
Campo è il termine con cui, in Java, ci si riferisce alle variabili direttamente contenute nel corpo di una classe. Intendo per contenimento diretto l'intervento della dichiarazione della variabile all'interno del blocco di codice che definisce il corpo di una classe e all'esterno di qualsiasi altro blocco presente nella classe. Un blocco è la successione di enunciati racchiusi tra due parentesi graffe, incluse. Ps M'era sfuggito il "private" a sinistra della dichiarazione del campo "ascoltatoreEventiJComboBox". Essendo private un modificatore apponibile ai soli membri (o ai costruttori), e non potendo un membro essere locale, ecco che la classe anonima implicitamente dichiarata ed esplicitamente definita a destra dell'uguale non risulta "locale". E' semplicemente "interna anonima".
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! Ultima modifica di PGI-Bis : 05-05-2007 alle 20:28. |
|
|
|
|
|
#112 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Sto imparando un sacco di cose
Non mi è chiarissimo questa parte di codice nella classe Main Prima di eseguire il metodo start quali sono gli eventi "pendenti" nel nostro caso? Codice PHP:
|
|
|
|
|
|
#113 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Be' dipende. Supponendo che quel metodo main di quella classe Main sia il punto d'entrata di un programma Java, il fatto che prima dell'esecuzione del metodo run del Runnable passato ad invokeLater esistano degli eventi pendenti è un dettaglio di realizzazione del framework Swing/AWT.
Cioè osservando quel codice io dovrei dire che non ce ne sono e che, quindi, l'esecuzione di new Main().start() è il primo compito spettante all'EDT (Event Dispatcher Thread). Tuttavia, esaminando le regole del framework Swing/AWT, si scopre che potrebbero già esserci eventi in consumazione, perchè le norme del framework non lo escludono. Nel caso in cui il programma Java non parta dal metodo main di quella classe Main la preesistenza di eventi AWT nella coda degli eventi AWT è un fatto che dipende da cosa il programma abbia già fatto prima di invocare quel main. Ciò detto, quell'arzigogolo di parentesi ha l'unico scopo di causare l'esecuzione di: new Main().start() equivalente a: Main main = new Main(); main.start(); all'interno dell'EDT. Il motivo sta nel fatto che quella particolare classe Main possiede, vuoi nel costruttore, vuoi nel metodo start, vuoi negli inizializzatori, istruzioni che maneggiano componenti Swing proiettabili. Swing è un framework a Thread singolo. Per una librerie che maneggia interfacce grafiche utente significa che esiste un solo Thread che si occupa di aggiornare l'aspetto dei componenti proiettabili sullo schermo. L'aspetto di un componente dipende da un insieme di proprietà dell'oggetto che lo rappresenta. Swing presuppone che le mutazioni di stato dell'oggetto-componente proiettabile, siano affidate all'EDT. Lo presuppone ma non lo impone. Ciò significa che io posso cambiare il valore del colore di un componente tramite un Thread diverso dall'EDT. Qual'è il risultato? Il risultato è indeterminato. E' indeterminato per via di alcune regole del linguaggio di programmazione Java le quali trattano il caso dell'accesso in lettura o scrittura al valore di variabili residenti nella regione di memoria condivisa dai Thread (c.d. Heap). Dunque, se, in ipotesi, cambio il colore di un componente all'interno dell'EDT io so che quella mutazione si rifletterà sul componente. Se cambio il colore all'interno di un Thread diverso dall'EDT io non posso essere certo del risultato. La cosa vale per ogni proprietà di ogni oggetto-componente Swing. Dimensioni, componenti contenuti, font, bordi eccetera. Quando maneggio le proprietà di un componente Swing lo devo fare all'interno dell'EDT altrimenti l'effettività (cioè il fatto che quei maneggiamenti producano l'effetto desiderato) è incerta.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#114 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
chiaro come sempre Mi sai dire dove cercare materiale su FontRenderContext e TextLayout ? Dalla documentazione java ci capisco poco grazie |
|
|
|
|
|
#115 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non so cosa si trovi in rete. Di cartaceo c'è Java 2D Graphics, di J. Knudsen. Comunque è un argomento correlato a Java2D.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#116 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Non riesco a capire i parametri del metodo draw della classe TextLayout
Codice PHP:
"which is the intersection of the TextLayout object's baseline with its left edge" Cosa è la object's baseline ? In pratica è l'angolo in basso a sinistra del testo? |
|
|
|
|
|
#117 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Hai presente la lettera g minuscola? Ecco, la baseline è la linea su cui è appoggiato "il pallino" mentre la "gambetta" si estendo sotto la baseline.
La documentazione dice che nel punto (x,y) è collocata l'intersezione tra la linea di base e il lato sinistro (guardando lo schermo) della parola. E' il punto a sinistra ma non è esattamente "in basso". E' un pelo più in su che in basso.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#118 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Un'altra cosa scusa
Codice PHP:
In pratica qui leggi le immagini da due file png che avevi già tu. Cosa c'entra l'url ? |
|
|
|
|
|
#119 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non è che io avessi molta scelta
Non uso un metodo (alla stregua di un public void init()) perchè voglio che il campo sia certamente inizializzato prima che altri metodi di quella classe possano essere invocati. Nel caso concreto potrei usare un blocco di inizializzazione perchè non sfrutto nessuna delle caratteristiche che distinguono i costruttori dai blocchi di inizializzazione: per abitudine opto per il costruttore. Una nota: la certezza che pallino e crocetta abbiano il valore deciso nel costruttore prima che essi siano usati non è soddisfatta tramite il solo assegnamento nel costruttore. Occorre, in particolare, prestare attenzione a che i campi non siano usati in metodi ereditati, sovrascritti e invocati da uno dei super-costruttori. Ma questo è un altro paio di maniche. Circa l'uso dell'URL o, meglio, per quanto riguarda l'individuazione delle immagini tramite l'uso del metodo getResource() di un oggetto di tipo Class (che è poi il findResource di un ClassLoader) basti osservare il fatto che 1. il percorso risultante è indipendente dalla piattaforma 2. il percorso risultante è indipendente dalla directory di esecuzione del processo che avvia il programma Per il primo punto, la questione è nell'alternativa. Per individuare le immagini potrei specificare il loro percorso in termini assoluti. Per windows sarebbe una cosa tipo: c:\cartellauno\cartelladue\programma\blabla\immagini\eccetera Ora, se provi a incollare nella sezione Sistemi Operativi Alternativi una richiesta tipo "non mi trova il file che si trova in c:\blabla\blabla" noterai un'esorbitante quantità di merluzzate in faccia. Quei "coup de merlűss" sottolineerebbero l'atipicità di quel percorso in sistemi diversi dall'amatissima finestra. Puoi usare cartelle in qualche modo collegate all'applicazione ma specificate in modo indipendente dalla piattaforma di esecuzione. Esistono alcune proprietà di sistema ("user.dir", "user.home" eccetera) che offrono percorsi di base nei quali infilare i dati del tuo programma. L'uso di questi percorsi rende il tuo programma indipendente dalla piattaforma ma dipendente da una procedura di installazione. Il findResource, invece, è una mezza mano santa. Scova file che si trovino in percorsi gestiti dal (da un) ClassLoader e questo include la posizione delle classi del programma, a prescindere dal valore della proprietà "user.dir" (che è alterabile). Restituisce un URL perchè i file potrebbero essere su un disco locale o in rete o all'interno di un file jar. Può restituire file che si trovino impacchettati in un file JAR e, solitamente, è proprio questo l'obiettivo: una volta terminata, l'applicazione andrà preparata per la distribuzione e questo richiederà il suo impacchettamento in un file JAR insieme, tra l'altro, alle sue icone. E' un piccolo gioiello, questo getClass().getResource.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#120 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 201
|
Ma il metodo getClass() restituisce quale classe ?
Ho finito di leggere i tuoi appunti molto utili e pure divertenti. Adesso per prima cosa devo sistemare la griglia perchè inserendo nelle caselle combinate tutti i multipli di 5 questi compaiono pure nella griglia. Poi devo mettere il 25 a metà di 20 e 30 dove la distanza tra 20 e 30 è uguale alla distanza tra 30 e 40 Devo in pratica sistemare la classe PainterAudiogramma |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:09.











. Negli appunti tu parli di campi ? Ho cercato in rete ma non ho trovato nulla
chiaro come sempre








