|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Un aiuto per un programmino in java
Ho realizzato con l'aiuto di un utente del forum un programmino in java che dovevo comsegnare ad un prof. per l'università.LA questione è questa:nel programmino è presente la classe Simone che ha al suo interno il main.Io ho creato dei metodi(6 per la precisione) ovvero ricerca libro,ricerca cd,cancella libro,cancella cd,inserisci libro inserisci cd ma non sono dentro al main.Come si fa a metterli nel main?Il prof mi ha detto che gli actionlistener devo metterli dentro al main
Allego anche il programmino!!
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Nessuno che aiuta un povero studente che ne sa poco sul java??
Forza raga datemi una mano!!!!
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
E' un programma così bellino, con un codice così pulito e ben fatto, perchè cavolo vuole farti infilare gli ActionListener nel main?
Bisognerebbe chiedergli se vuole tutto il codice dell'actionlistener nel main oppure solo la dichiarazione ed inizializzazione delle classi che implementano ActionListener nel main, oppure un solo ActionListener per tutti gli eventi dichiarato o costruito nel main. Alla peggio (ammucchiata nel main) sarai costretto ad usare delle istanze delle interfacce ActionListener create nel main, tipo: Codice:
public static void main(String[] args) { ActionListener listener1=new ActionListener() { public void actionPerformed(ActionEvent a) { //gestione eventi } }; //e poi le passi ad un costruttore di MenuFrame MenuFrame frame=new MenuFrame(listener1) } Ultima modifica di PGI : 14-10-2003 alle 15:23. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Ti faccio sapere,gli ho mandato una mail,vediamo cosa mi risponde.Lui mi ha detto di implementare gli action listener nel main e non di richiamarli esternamente.Puoi darmi una mano?
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Una mano la do volentieri, pur restando fermamente convinto dell'inutilità di quello che ti è stato chiesto di fare.
Il problema è che "implementare nel main" non è proprio una linea guida così definita: ad esempio, potresti creare nel main i tuoi oggetti ActionListener e nei rispettivi metodi "actionPerformed" rinviare a metodi esterni, tipo: Codice:
p s v main(...) { ActionListener listener1=new ActionListener() { public void actionPerformed(ActionEvent a) { doSome(); } } } p s v doSome() {...} D'altro canto, dovendo usare direttamente il metodo actionPerformed per gestire la funzione, per questioni legate alla jvm gli oggetti a cui può accedere il corpo di una classe "astratta" (però non metterei la mano sul fuoco sul fatto che questo sia il termine esatto per definire il nostro listener "interno") devono essere costanti (final). Si può fare, per carità, ma il senso mi sfugge. Cmq, quando hai la risposta del professore fatti sentire e vediamo. &Ciao. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Allora,ho appena parlato col prof:
lui vuole che i metodi "inserisci libro,inserisci cd" siano metodi della classe simone e gli action listener siano contenuti li dentro.In pratica lui mi ha detto che gli actionlistener devono essere interni alla classe simone e non esterni.listen e listenl sono metodi relativi alla cancellazione dei libri e dei cd(questi action listener devo essere dentro simone. Inoltre mi ha detto di mettere cd e libro come esterne(penso siano gia classi esterne giusto?)!!
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb Ultima modifica di tognesimo : 16-10-2003 alle 14:17. |
![]() |
![]() |
![]() |
#7 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
La cosa allora ha un senso, diciamo che lui vuole un certo modello di organizzazione delle classi, diverso da quello che hai adottato e per certi versi più comune.
Libro e CD sono due oggetti e li crei a partire da un modello di classe (e qui le due classi Libro e CD sono perfette). Poichè CD e Libro sono già classi esterne, pur essendo definite nello stesso file sorgente, credo che il tuo prof. voglia che tu crei anche due file sorgente (CD.java e Libro.java). E' sufficiente un copia e incolla. (sempre che tu non abbia già i file "separati"). Listen e ListenLibri le elimini e "travasi" il loro contenuto in un unico actionPerformed. Quale? Anche qui devo interpretare i voleri dell'onnipotente: secondo me adotti una "tecnica" consigliabile, quella di tenere separata la classe che contiene il main dal resto del codice sorgente. Tuttavia, dovendo comunque usare Simone per un'ActionListener ti conviene far diventare Simone la finestra dell'applicazione (spostando in pratica il contenuto di MenuFrame in Simone), fargli implementare appunto ActionListener e raggruppare tutti gli eventi nel suo actionPerformed. Nella classe MenuFrame hai usato delle istanze astratte di ActionListener per alcuni bottoni (es. searchButtonBook.addActionListener(new ActionListener()...). Adesso devi delegare il compito di quelle classi ad un metodo della classe Simone e poi richiamarlo nel suo actionListener in associazione all'evento proveniente dal componente searchButton. Non è sbagliato l'uso di classi astratte, ma ha un suo scopo, che è quello di ridurre al minimo il ritardo di risposta agli eventi che si ha quando ci si trova di fronte a sfilze di pulsanti e si deve verificare nell'acitonPerformed chi abbia lanciato l'evento AWT. Nel nostro caso, mi sembra che Egli voglia un unico ActionListener, tu esegui ![]() In estream sintesi, la struttura del tuo programma credo debba seguire questo schema: Codice:
1 file CD.java -> sorgente della classe CD 1 file Libro.java -> sorgente della classe Libro 1 file Simone.java -> la parte "grafica" dell'applicaizone + il main: class Simone extends JFrame implements ActionListener { Button cdButton=null; p s v main(...) { new Simone(); } Simone() { ...costruzione della GUI show(); } actionPerformed(evento) { if(evento.source==cdButton) { metodoAssociatoAcdButton(); } } metodoAssociatoAcdButton() { faiqualcosa... } } |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Hai Pvt PGI
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
![]() |
![]() |
![]() |
#9 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
In allegato c'è lo stesso programma "spezzato" in tre classi (che tra l'altro già c'erano) CD, Libro e Simone.
Di "Simone.java" è cambiata solo l'organizzazione delle funzioni (c'è un unico actionListener adesso) che matengono invariato il contenuto. Credo che il codice possa essere ridotto anche parecchio però non so quale sia il livello di conoscenza presunto dal tuo professore. Se il corso è stato di ben 8 ore direi che quello che hai fatto ha già dello straordinario. &Ciao. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Grazie Pgi,se voglio cambiare il nome della classe "Simone" in "Archivio" come faccio?Ti ringrazio per il tuo aiuto mi 6 stato davvero prezioso!
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
![]() |
![]() |
![]() |
#11 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
nel file Simone.java cambi il nome della classe da Simone ad Archivio, salvi (sempre come Simone.java) poi rinomini il file in Archivio.java e ricompili.
oppure cambi il nome della classe da Simone ad Archivio (sempre nel sorgente) poi salvi come Arichivio.java e ricompili. &Ciao |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
grazie PGI ho risolto!!Una piccola cosa:Quando ha creato l'action performed come hai fatto ad ottenere un puntatore all'oggetto che ha generato l'evento?
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
C'è una versione breve (quella che ti propino) ed una più lunga.
La breve: actionPerformed(ActionEvent a) {...} gli ActionEvent hanno un metodo "Object getSource()" che restituisce un "riferimento" all'oggetto che ha generato l'evento. Cosa sia realmente quel "oggetto sorgente" dipende da come è fatto l'ActionEvent, per i componenti che trovi nelle librerie swing, awt et similia è il componente su cui hai agito ma nulla vieta la creazione di eventi che abbiano impostato come sorgente un oggetto totalmente diverso. &Ciao. PS, fammi sapere (se vuoi) com'è andata col prof, che sono curioso ![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
E soprattutto quando ti da il voto dagli il libretto di PGI.
![]() |
![]() |
![]() |
![]() |
#15 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Dai non dire così
![]() Ho solo separato in 3 parti un file di testo, tutte le routine e tutta la parte grafica sono assolutamente farina del suo sacco (o almeno del sacco che è arrivato a me ![]() ![]() &Ciao. |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Mar 2001
Città: Grosseto
Messaggi: 2451
|
Quote:
__________________
Hp Omen 15 - Ryzen 5800H - RTX 3060 6Gb |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Perchè credi che non mi cia trovato nella tua situazione?? A scuola, all'università e e al lavoro? E te lo ripeto, come ti scrissi nell'altro tuo post, non ci sarà sempre qualcuno ad aiutarti, anzi a "sostituirti".
Io cerco di capirti, e ti avrei aiutato per primo se non mi fossi accorto che non avevi volontà di ricercare e applicarti ma solo di avere la pappa pronta. Almeno questa è stata la mia impressione nell'altro tuo post, questo non l'ho manco letto. Scusa la durezza. |
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
[Scherz' mode on]
Se c'è qualcuno che vuol fare ammenda, avrei qui un 4000 linee di codice Java da ottimizzare, così, tanto per divertirsi...
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:43.