Originariamente inviato da giuliocesare80
per me la inner-class è rappresentata dal codice racchiuso tra parentesi graffe
No, non sono le graffe in sé che contano!
codice:
class Esterna {
class Interna {
}
}
La classe Esterna non è dentro un'altra classe e per questo tipicamente viene definita "top-level". La classe Interna è fisicamente dichiarata dentro Esterna e non è marcata 'static'. Questo la rende una "inner-class", per la precisione una normale (o detta "regular") inner-class (per differenziarla dalle inner-class "anonime" e "locali", che sono altri 2 tipi).
Quindi una inner class "normale" è una classe che è membro di un'altra classe e non è marcata static.
Originariamente inviato da giuliocesare80
ho inserito un ritorno dell'eccezione dove mi hai scritto:
con l'intenzione di far comparire un messaggio di errore (anche qui tutto da verificare).
Fare un System.out.println ovviamente è tecnicamente corretto. Ma in una applicazione "grafica" lanciata come si deve a livello reale, generalmente la "console" non si vede! E quindi non è molto appropriato, visto che il messaggio dovrebbe informare l'utente (e non uno sviluppatore).
In Swing esiste la classe JOptionPane, che consente di mostrare le classiche dialog box di messaggi, eventualmente anche con l'apposita iconcina es. del triangolo, ecc....
E usarla è molto semplice:
codice:
JOptionPane.showMessageDialog(this, "Errore di I/O durante il caricamento della immagine", "Errore", JOptionPane.ERROR_MESSAGE);
Il 'this' è sempre il riferimento al tuo frame corrente, se metti questa riga dentro caricaImmagine().
E con questa unica e semplice riga puoi mostrare una dialog di questo tipo (nota: l'aspetto della finestra e della icona dipendono dal Look&Feel impostato!):

La invocazione di showMessageDialog è "bloccante", si esce da lì solo quando l'utente ha cliccato su OK.
Originariamente inviato da giuliocesare80
Ho provato ad invocare caricaImmagine() come mi hai consigliato ma vedendo la serie di errori che mi trova direi che ho commesso l'ennesimo strafalcione!!
Ma per invocare un metodo non devo mettere : oggetto.metodo ?
In generale sì ma in questo caso non serve l'oggetto!! Dai actionPerformed delle inner-class, il caricaImmagine() è "visibile" perchè è in "scope".
Tu però hai messo:
public void actionPerformed(finestraPrincipale.caricaImmagine( ))
Semplicemente è sbagliato. Lì ci vuole il parametro ActionEvent e. La signature (la "firma") del metodo non la devi cambiare. Si chiama actionPerformed, ha ritorno void, ha 1 parametro di tipo ActionEvent. Basta, non devi toccare nulla di questo.
Nel corpo del metodo invocherai caricaImmagine().
codice:
public void actionPerformed(ActionEvent e) {
caricaImmagine();
}
Originariamente inviato da giuliocesare80
Per quanto riguarda i due metodi che mi hai accennato, le mie scarse conoscenze e il mio lento e disordinato apprendimento mi spingono ad utilizzare il metodo più semplice (ammesso che ci sia!!!) onde evitare di avventurarmi in strade per me difficili da percorrere..
Tra le due strade che avevo accennato, quella più semplice è usare componenti Swing per visualizzare le singole immagini. L'altra, ovvero un unico componente che "disegna" le immagini, è decisamente più complessa.
Ma esiste una ulteriore soluzione, che non ho detto e che bisogna vedere se ti va bene. Faccio una premessa: hai presente quei software che hanno la finestra principale e poi dentro hanno finestre che contengono i singoli documenti? Questo è tipico ad esempio dei programmi di grafica o dei word processor.
Queste applicazioni vengono definite MDI, "multiple document interface" e in Java si possono fare tramite l'uso di 2 componenti Swing: JDesktopPane e JInternalFrame.
Vedi qui sul tutorial Sun dove mostra anche una immagine.
Ti può andare bene? Il tuo obiettivo è proprio quello di poter gestire semplicemente "documenti" separati? Allora questa soluzione è molto valida e appropriata, anche perché il trascinamento dei frame interni è già implementato .... nelle due soluzioni che ho detto prima, sarebbe invece comunque a tuo carico!