Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Java]Aiuto con JtextArea

    Ciao a tutti, ho un problema con la TextArea del mio programma Java:

    Praticamente voglio stampare in quest'ultima, allora la textarea mi è stata generata automaticamente dentro la classe che mi ha creato netbeans di default, la textarea l'ho chiamata AreaDebug praticamente se invoco AreaDebug.append("una stringa generica"); all'interno della classe generata da netbeans, la stampa avviene correttamente, il problema nasce quando voglio stampare nella taxtarea ad di fuori di questa classe, dove la textarea non mi viene riconosciuta, quindi la mia idea era quella di creare un metodo dentro la classe generata di default da netbeans al quale gli passo una stringa S che poi verra stampata con thiAreaDebug.append(S); il problema è che questo metodo non riesco a vederelo e quindi ad usarlo al di fuori della classe stessa dove è stato dichiarato avvero quella generata di default da netbeans, chiaramente il metodo è stato dichiarato come pubblico!
    ps: vorrei evitare di adottare soluzioni drastiche come sovrascrivere direttamente il metodo println

    grazie mille a tutti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Al di là del fatto che farsi generare del codice da un IDE è sempre una pessima idea (non sto qui a ripetere il perchè), in special modo quando si tratta di componenti visuali, direi che se non posti il codice non si riesce a darti una mano. Se dici che hai il metodo pubblico che fa quello ceh chiedi, il programma deve funzionare. Senza codice, non possiamo valutare altri eventuali problemi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Conosco poco netbeans e l'ho abbandonato subito quando ho scoperto ke il codice ke generava x le interfacce grafiche era una schifezza, purtroppo per java nn esiste qualcosa di buono come visual studio per il c# e converrebbe farsi ancora le gui a mano.

    Detto ciò dovresti cercare da quaclhe parte il riferimento alla JTextArea, penso sia nella classe in cui si trova il main e richiamare su questo il setText...più di questo nn posso dirti.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io non ho capito manco la richiesta, fai te.
    In effetti è vero, il codice generato da matisse è un mezzo orrore, ma è da vedere come fa lui l'append e la visibilità che dà.
    L'ideale sarebbe avere un metodo pubblico che abbia come parametro il testo da inserire, dato questo testo il metodo lo mette in append all'area.
    RTFM Read That F*** Manual!!!

  5. #5
    Allora posto il codice che mi ha generato in automatico NetBeans:
    allora questo è parte del codice che netbenas mi genera in automatico, oltre a questo ho un metodo il quale mi cattura un l'evento di un bottone, dentro questo metodo riesco benissimo a stampare nella text area,
    codice:
    public class ListFilmView extends FrameView {
    
        public ListFilmView(SingleFrameApplication app) {
            super(app);
    
            initComponents();
    
            // status bar initialization - message timeout, idle icon and busy animation, etc
            ResourceMap resourceMap = getResourceMap();
            int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
            messageTimer = new Timer(messageTimeout, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    statusMessageLabel.setText("");
                }
            });
            messageTimer.setRepeats(false);
            int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
            for (int i = 0; i < busyIcons.length; i++) {
                busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
            }
            busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
                    statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
                }
            });
            idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
            statusAnimationLabel.setIcon(idleIcon);
    
    
            // connecting action tasks to status bar via TaskMonitor
            TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
            taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
                public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    String propertyName = evt.getPropertyName();
                    if ("started".equals(propertyName)) {
                        if (!busyIconTimer.isRunning()) {
                            statusAnimationLabel.setIcon(busyIcons[0]);
                            busyIconIndex = 0;
                            busyIconTimer.start();
                        }
                    } else if ("done".equals(propertyName)) {
                        busyIconTimer.stop();
                        statusAnimationLabel.setIcon(idleIcon);
                    } else if ("message".equals(propertyName)) {
                        String text = (String)(evt.getNewValue());
                        statusMessageLabel.setText((text == null) ? "" : text);
                        messageTimer.restart();
                    } else if ("progress".equals(propertyName)) {
                        int value = (Integer)(evt.getNewValue());
                    }
                }
            });
        }
    
        @Action
        public void showAboutBox() {
            if (aboutBox == null) {
                JFrame mainFrame = ListFilmApp.getApplication().getMainFrame();
                aboutBox = new ListFilmAboutBox(mainFrame);
                aboutBox.setLocationRelativeTo(mainFrame);
            }
            ListFilmApp.getApplication().show(aboutBox);
        }
    ora quello che ho fatto è stato aggiungere un metodo all'interno della classe ListFilmView
    codice:
    public void println(String s){ /*metodo per stamapre nella text area */
            this.AreaDebug.append(s+"\n");
        }
    attraverso il quale voglio stampare nella TextArea, il problema è che quando provo a richiamare questo metodo dalla classe dove risiede il mani, tale metodo non mi viene visto
    quindi dalla classe principale succede che quando voglio stampare digito questo:
    ListaFilmView.println("stringa di prova");
    il compilatore mi da questo errore:
    codice:
    cannot find symbol
      symbol:   variable ListaFilmView
      location: class listfilm.ListFilmApp
    quello sto cercando di fare è proprio quello che dici tu valia il problema è che questo metodo non mi viene visto.
    spero di essere stato più chiaro!e cmq è poco che programma in Java (circa 2 mesetti) quindi grazie per la pazienza che avete

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    e chi è ListaFilmView? leggi bene quello che il compilatore dice. l'unica parte che realmente interessata non l'hai postata
    RTFM Read That F*** Manual!!!

  7. #7
    ListaFilmView è la classe generata automaticamente dai NetBenas nella quale risiede la GUI in teoria il codice di questa classe l'ho postato! di quale codice avresti bisogno? grazie per l'aiuto!

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    in teoria, di quel codice non so cosa farne perché non interessa come lo costruisci (al max come dichiari il metodo che fa l'append.
    Interessa come usi il metodo (come fai la chiamata).
    Infine ti faccio notare una cosa: l'attributo static.
    Se un metodo non è statico, non puoi usare richiamarlo con

    NomeClasse.nomeMetodo

    ma al massimo

    nomeIstanza.nomeMetodo.

    se non hai una istanza della tua classe memorizzata da qualche parte è dura riuscire a chiamare il metodo con quel sistema (ecco il cannot find symbol).

    Ti sconsiglio di dichiararlo statico perché significherebbe avere tutta una serie di membri/funzioni statiche che non è detto nemmeno funzionino.

    In calce un consiglio: stai imparando ad usare java nel modo peggiore: le librerie sono davvero tante e avere una buona base aiuta. Lascia perdere gli strumenti automatici, torna alla base che è meglio.
    RTFM Read That F*** Manual!!!

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.