Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  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

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.