Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Contenuto JTextArea

  1. #1

    Contenuto JTextArea

    Ciao ragazzi,vi kiedo delucidazioni su un'operazione ke ho svolto parekkie volte ma ke all'improvviso non riesco più a completare con successo allora la situazione è : in una classe GUI ho un semplicissimo JFrame con un pannello JPanel cui è appiccicata una JTextArea inizialmente vuota e un'altra classe Prova in cui leggo da tastiera una stringa e vorrei che questa divenisse il testo della JTextArea della classe GUI.
    PROBLEMA : il testo non si aggiorna!
    HELP ME PLEASE!

  2. #2

    Re: Contenuto JTextArea

    Originariamente inviato da claujava
    Ciao ragazzi,vi kiedo delucidazioni su un'operazione ke ho svolto parekkie volte ma ke all'improvviso non riesco più a completare con successo allora la situazione è : in una classe GUI ho un semplicissimo JFrame con un pannello JPanel cui è appiccicata una JTextArea inizialmente vuota e un'altra classe Prova in cui leggo da tastiera una stringa e vorrei che questa divenisse il testo della JTextArea della classe GUI.
    PROBLEMA : il testo non si aggiorna!
    HELP ME PLEASE!
    Posta codice pliiis
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    [code]
    import java.awt.Container;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    /**
    *
    * @author Claudio
    */
    public class GUI {
    public static JTextArea ta=new JTextArea();;
    public static void main (String [] args){
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    mioFrame f=new mioFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(100, 100);
    f.setVisible(true);
    }
    });
    }
    static class mioFrame extends JFrame{
    Container cp =getContentPane();
    public mioFrame(){
    JPanel pan=new JPanel();
    ta.setRows(5);
    ta.setColumns(5);
    ta.setEditable(true);
    ta.setText("helloWorld");
    ta.setVisible(true);
    pan.add(ta);
    cp.add(pan);
    }}}

    /code]
    public class Prova {
    public static void main(String []args ){

    GUI.ta.setText("NOT");

    }
    }
    codice:
    
    

  4. #4
    codice:
    import java.awt.Container;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    /**
     *
     * @author Claudio
     */
    public class GUI {
        public static JTextArea ta=new JTextArea();;
    public static void main (String [] args){
         SwingUtilities.invokeLater(new Runnable() {
                public void run() {
    mioFrame f=new mioFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(100, 100);
    f.setVisible(true);
        }
       });
    }
    static class mioFrame extends JFrame{
    Container cp =getContentPane();
        public mioFrame(){
    JPanel pan=new JPanel();
    ta.setRows(5);
    ta.setColumns(5);
    ta.setEditable(true);
    ta.setText("helloWorld");
    ta.setVisible(true);
    pan.add(ta);
    cp.add(pan);
    }}}

    [code]
    public class Prova {
    public static void main(String []args ){

    GUI.ta.setText("NOT");

    }
    }
    codice:
    
    

  5. #5
    invocando il repaint() su GUI.ta non cambia nulla..e nemmeno usando il metodo append("NOT") al posto di setText("NOT")....

  6. #6
    Quando Prova viene avviato, MioFrame non è stato istanziato, quindi non puoi vedere la textarea.

    Ecco un esempio:
    codice:
    /**
     * @(#)Example.java
     *
     *
     * @author Vincenzo
     * @version 1.00 2011/5/29
     */
    
    import javax.swing.*;
    import java.awt.Dimension;
    
    public class Example extends JFrame{
        private JTextArea textArea;
        
        /**
         * Creates a new instance of <code>Example</code>.
         */
        public Example() {
        	super("Example");
        	
        	this.textArea = new JTextArea();
        	JScrollPane jsp = new JScrollPane( this.textArea );
        	jsp.setPreferredSize( new Dimension(200, 200) );
        	this.add( jsp );
        	this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        	this.setSize(200, 200);
        	this.pack();
        	this.setVisible(true);
        	
        	new Appender().start();
        }
        
        public void append(String text){
        	this.textArea.append( text );
        }
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            SwingUtilities.invokeLater(
            	new Runnable(){
            		@Override
            		public void run(){
            			new Example();
            		}
            	}
            );
        }
        
       	private class Appender extends Thread{
        	@Override
        	public void run(){
            	for(int i = 0; i < 10; i++){
            		try {
            			Thread.sleep(1500);
            		} catch ( InterruptedException exc ){
            			exc.printStackTrace();
            		}
            		textArea.append("Append " + i + "\n");
            	}    		
        	}
        }
    }
    adesso prova a sistemare il tuo codice.

  7. #7
    se provi a mettere due classi separate(una per Example,l'altra per Appender) purtroppo continua a non funzionare

  8. #8
    ok risolto grazie mi sembra di aver capito kel'aggiornamento della TextArea può avvenire solo da parte di un Thread..o sbaglio?

  9. #9
    Originariamente inviato da claujava
    se provi a mettere due classi separate(una per Example,l'altra per Appender) purtroppo continua a non funzionare
    No, invece funziona. Non so cosa tu abbia scritto, ma prova a fare in questo modo:
    Example.java
    codice:
    import javax.swing.*;
    import java.awt.Dimension;
    
    public class Example extends JFrame{
        private JTextArea textArea;
        
        /**
         * Creates a new instance of <code>Example</code>.
         */
        public Example() {
        	super("Example");
        	
        	this.textArea = new JTextArea();
        	JScrollPane jsp = new JScrollPane( this.textArea );
        	jsp.setPreferredSize( new Dimension(200, 200) );
        	this.add( jsp );
        	this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        	this.setSize(200, 200);
        	this.pack();
        	this.setVisible(true);
        }
        
        public void append(String text){
        	this.textArea.append( text );
        }
    }
    Appender.java
    codice:
    public class Appender extends Thread{
    	private Example e;
    	
        /**
         * Creates a new instance of <code>Appender</code>.
         */
        public Appender(Example e) {
        	this.e = e;
        }
        
        @Override
        public void run(){
            for(int i = 0; i < 10; i++){
            	try {
            		Thread.sleep(1500);
            	} catch ( InterruptedException exc ){
            		exc.printStackTrace();
            	}
            	e.append("Append " + i + "\n");
            }    		
        }
    }
    Main.java
    codice:
    import javax.swing.*;
    public class Main {
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            SwingUtilities.invokeLater(
            	new Runnable(){
            		@Override
            		public void run(){
            			Example e = new Example();
            			new Appender(e).start();
            		}
            	}
            );
        }
    }
    Le classi devono essere collocate nello stesso package.

  10. #10
    Originariamente inviato da claujava
    ok risolto grazie mi sembra di aver capito kel'aggiornamento della TextArea può avvenire solo da parte di un Thread..o sbaglio?
    Non necessariamente, ma in genere è sempre meglio utilizzare Thread diversi per evitare eventuali freezing dell'interfaccia, soprattutto nel caso in cui questi svolgono un lavoro di grande quantità.

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.