Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    32

    [Java] JTextArea.append(String) da un'altra classe, come fare?

    Salve a tutti, l'esempio è per JTextArea (Swing, Windows Builder PRO), ma credo che valga per tutti i componenti visuali.

    Ho creato un JFrame da eclipse con Builder Pro e al suo interno ho aggiunto dei componenti tra cui una JTextArea per appendere del testo preso da un BufferedReader.


    Io vorrei da un'altra classe che ho creato io (classA) scrivere attraverso il metodo append(str) nella TextArea della classe mainJFrame (creata in automatico da Windows Builder)
    In questa classe A ho creato una "funzione" (alla C) o metodo come vogliamo chiamarlo che al suo interno contiene 2 Thread, in uno di questi voglio fare l'operazione di cui sopra.

    Come devo procedere, come si fa di solito a intervenire su componenti grafici di altre classi?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    Io vorrei da un'altra classe che ho creato io (classA) scrivere attraverso il metodo append(str) nella TextArea della classe mainJFrame
    Se nella classA vuoi poter accedere al JTextArea, la soluzione più diretta è: fare in modo che classA riceva e si tenga (come variabile di istanza) il riferimento al JTextArea.
    È buono? (sì e no) ... dipende. Queste sono questioni di "design" delle classi. Ed esistono più soluzioni, dalla più banale citata poco fa ad altre che fanno uso di interface Java per disaccoppiare le classi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    32
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se nella classA vuoi poter accedere al JTextArea, la soluzione più diretta è: fare in modo che classA riceva e si tenga (come variabile di istanza) il riferimento al JTextArea.
    È buono? (sì e no) ... dipende. Queste sono questioni di "design" delle classi. Ed esistono più soluzioni, dalla più banale citata poco fa ad altre che fanno uso di interface Java per disaccoppiare le classi.
    Si ma detto più terra terra? Che intendi con il testo che ho messo in grassetto? Nel senso, io credo che queste operazioni si facciano all'ordine del giorno. Mi sembra strano non sia una cosa semplice da fare o per lo meno intuitiva.

    io avevo fatto cosi:

    codice:
    mainJFrame classMain = new mainJFrame ();
    classMain.textArea.append("TestoDaAppendere");
    Ma cosi creo un altro oggetto differente dalla classe principale di JFrame, tra l'altro non funzione e mi da errore "source unknown"

    Ho anche cercato di passare al metodo della Classe A l'eggetto JTextArea nomeTxtArea;
    codice:
    mioMetodo(JTextArea nomeTXTArea);

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    Nel senso, io credo che queste operazioni si facciano all'ordine del giorno. Mi sembra strano non sia una cosa semplice da fare o per lo meno intuitiva.
    Ma infatti, almeno nello scenario basilare che ho detto io, è semplice. Devi solo avere chiari gli aspetti concettuali di "design". Chi istanzia quella che hai chiamato Class A? Quando? In che relazione è con la classe del frame? Ecc....


    Ecco un esempio, chiaramente super-abbozzato:

    codice:
    public class FramePrincipale extends JFrame {
        private JTextArea textArea;
    
        public FramePrincipale() {
            textArea = new JTextArea();
    
            // ....
    
            AltraClasse ac = new AltraClasse(textArea);
        }
    
        // ....
    }
    
    
    
    public class AltraClasse {
        private JTextArea textArea;
    
        public AltraClasse(JTextArea textArea) {
            this.textArea = textArea;
        }
    
        // ... usa textArea in altri metodi
    }

    Come puoi vedere lo scenario è semplice: FramePrincipale istanzia AltraClasse e gli può passare il riferimento al JTextArea.
    Questo, ripeto, è un caso banale/basilare. E non è detto che sia (quasi) esattamente il tuo ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    32
    Quote Originariamente inviata da andbin Visualizza il messaggio

    Ecco un esempio, chiaramente super-abbozzato:

    codice:
    public class FramePrincipale extends JFrame {
        private JTextArea textArea;
    
        public FramePrincipale() {
            textArea = new JTextArea();
    
            // ....
    
            AltraClasse ac = new AltraClasse(textArea);
        }
    
        // ....
    }
    
    
    public class AltraClasse {
        private JTextArea textArea;
    
        public AltraClasse(JTextArea textArea) {
            this.textArea = textArea;
        }
    
        // ... usa textArea in altri metodi
    }

    Come puoi vedere lo scenario è semplice: FramePrincipale istanzia AltraClasse e gli può passare il riferimento al JTextArea.
    Questo, ripeto, è un caso banale/basilare. E non è detto che sia (quasi) esattamente il tuo ...
    Diciamo che hai beccato in pieno! Ricapitolando.

    1.Altraclasse è un metodo della class Altraclasse giusto?
    2.Lo devo istanziare in FramePrincipale o qui per il mio codice:
    codice:
    public mainJFrame() throws IOException {
    3.JTextArea va dichiarata private
    4.Quando istanzio la classe gli passo TextArea
    5.poi nel metodo metto come parametro da passare un JTextArea quindi quando richiamo il metodo:

    codice:
    ac.AltraClasse(textArea);
    Mentre per usare poi l' append nel metodo faccio cosi:

    codice:
    public AltraClasse(JTextArea textArea) {
            this.textArea = textArea;
            textArea.append(stringa);
    
        }
    e dovrebbe funzionare.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    1.Altraclasse è un metodo della class Altraclasse giusto?
    Già qui andiamo male ....
    Se ti riferisci alla parte

    codice:
        public AltraClasse(JTextArea textArea) {
            this.textArea = textArea;
        }

    Questo è un costruttore. NON è un metodo.


    Domanda: stai studiando Java su un valido libro di testo ... o stai andando a caso?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    32
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Già qui andiamo male ....
    Se ti riferisci alla parte

    codice:
        public AltraClasse(JTextArea textArea) {
            this.textArea = textArea;
        }

    Questo è un costruttore. NON è un metodo.


    Domanda: stai studiando Java su un valido libro di testo ... o stai andando a caso?

    Allora facciamo così dato che come al mio solido vado a intuizione senza studiare... forse è il caso di fermarmi un secondo.
    Il costruttore è quel metodo con lo stesso nome della classe?

    Io provengo dal C che ho studiato per un anno all'università. Ora sto passando al Java perché mi serve fare un programma sui socket. Visto la potenza che riconosco in Java quasi sicuramente lo userò per tanti piccoli tools che voglio, quindi la domanda è:
    Quale testo mi consigli?

    Io sto studiando da HTML.it (quello che mi serve, non tutto.)

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    forse è il caso di fermarmi un secondo.
    Anche di più.

    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    Il costruttore è quel metodo con lo stesso nome della classe?
    Sì, ha lo stesso nome della classe. Ma ti ripeto: non è da indicare con il termine di "metodo".

    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    Quale testo mi consigli?
    Solo in italiano o anche in inglese? Limitando all'italiano, comunque sui forum citano spesso (e bene) i libri su Java di Claudio De Sio (cerca in rete o su qualche store online). Non li conosco personalmente e quindi non potrei dare giudizi. Mi baso più che altro sul fatto che sono molto citati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    32
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Anche di più.


    Sì, ha lo stesso nome della classe. Ma ti ripeto: non è da indicare con il termine di "metodo".


    Solo in italiano o anche in inglese? Limitando all'italiano, comunque sui forum citano spesso (e bene) i libri su Java di Claudio De Sio (cerca in rete o su qualche store online). Non li conosco personalmente e quindi non potrei dare giudizi. Mi baso più che altro sul fatto che sono molto citati.

    Acquistato ci risentiamo fra 500 pagine.

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nobo_ Visualizza il messaggio
    ci risentiamo fra 500 pagine.
    Se avrai dubbi/problemi su Java solo dopo 500 pagine ..... sei fortunato!
    Quindi probabilmente molto prima.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.