Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    9

    [Java] Jtext areas e System.out.println

    Ciao a tutti sto realizzando un progetto che poi avrà un'implementazione grafica.
    Devo realizzare in modo separato la logia dalla grafica e metterle poi in comunicazione con una user interface connector.
    Il mio problema è questo:
    Come faccio ad utilizzare all'interno della parte logica le System.out.println che normalmente utilizzerei x stampare a console?
    Esiste un modo x reindirizzarle verso una jtext??
    grazie a tutti e vi prego aiutatemi

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Sì, quando crei una classe xyz che gestisce dei dati e genera dei risultati, invece di mandare l'output a qualsivoglia dispositivo, fai restituire ai metodi appropriati il tipo di dato che ti interessa. In altre parole, banalmente

    codice:
    public class Persona {
      private String name, surname;
      private int age;
    
      public Persona (String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
      }
      
      public Persona() {
        this("John", "Doe", 44);
      }
    
      public String getName() {
        return this.name;
      }
    
      public String getSurname() {
        return this.surname;
      }
    
      public int getAge() {
        return this.age;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public void setSurname(String surname) {
        this.surname = surname;
      }
    
      public void setAge(int age) {
        this.age = age;
      }
    
      public String toString() {
        return (this.name + " "+ this.surname + " " +this.age);
      }
    }
    come vedi in questa classe non c'è nessun output verso alcun media.

    A questo punto una classe di test con output a console istanzierà un oggetto di tipo Persona e manderà a console tramite System.out.println(...) i dati di interesse, mentre una classe con JTextField, JTextArea o quale componente grafico di tuo gradimento utilizzerà i suoi metodi setText e come argomenti i giusti metodi di Persona.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    9
    Originariamente inviato da Andrea1979
    A questo punto una classe di test con output a console istanzierà un oggetto di tipo Persona e manderà a console tramite System.out.println(...) i dati di interesse, mentre una classe con JTextField, JTextArea o quale componente grafico di tuo gradimento utilizzerà i suoi metodi setText e come argomenti i giusti metodi di Persona.
    Ok....questo è un pezzo di codice dove ad esempio uso le System.out.Println.
    Come dovrei fare?
    public void esegui(Giocatore gioc){
    if(proprietario==null){
    if(gioc.getDenaro()>costo)
    gioc.acquistaProp(this, costo);
    else
    System.out.println("Non hai abbastanza soldi");
    }
    else if(getProprietario()!=gioc.getName())
    pagaProprietario(gioc);
    else
    System.out.println("Ti trovi su un tuo terreno");

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Per esempio potrestri avere una JTextArea che rappresenta i messaggi di sistema...

    codice:
    JTextArea sysmsg = new JTextArea();
    ...
    ...
    ed invece dei vari System.out. println avrai
    codice:
    sysmsg.append("Messaggio xyz\n");
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    9
    Quindi inserisco questo metodo all'interno del codice che gestirà la parte grafica(swing)
    Originariamente inviato da Andrea1979
    codice:
    JTextArea sysmsg = new JTextArea();
    ...
    ...
    Mentre all'interno della parte che deve gestire la logica del mio programma al posto delle System.out.println uso
    codice:
    sysmsg.append("Messaggio xyz\n");
    Giusto?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    No, e l'ho anche detto... la parte che gestice la logica del tuo programma è separata il più possibile dalla parte grafica... il che dovrebbe farti accendere una lampadina nella testa che se ti venisse in mente di mettere un jtextarea nella parte di logica forse sei sulla strada sbagliata. LA JTextarea la crei e gestisci all'interno della parte grafica. La parte di logica restituisce solo dati, non ne deve fare output
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    9
    E quindi ad esempio come potrei modificare quel metodo che ho postato che fa parte della logica?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Come ti ha già suggerito Andrea nei post precedenti: devi cercare di rivedere la situazione in modo che sia l'interfaccia a richiamare i metodi della parte logica.
    Di conseguenza, rivedere quel metodo, ad esempio in questo modo:
    codice:
    private String motivazione;   // Qui avrò l'eventuale motivazione del perchè non è giocabile
    ...
    public boolean isGiocabile(Giocatore gioc) {
       boolean ret = true;
       if (proprietario == null) {
          if (gioc.getDenaro() <= costo) {
             motivazione = "Non hai abbastanza soldi";
             ret = false;
          }
       } else {
          if (getProprietario() == gioc.getName()) {
             motivazione = "Ti trovi su un tuo terreno";
             ret = false;
          }
       }
       return ret;
    }
    
    public String getMotivazione() { return motivazione; }
    
    public void gioca(Giocatore gioc) {
       if (proprietario == null) {
          gioc.acquistaProp(this, costo);
       } else {
          pagaProprietario(gioc);
       }
    }
    A questo punto la parte grafica farà qualcosa del genere:
    codice:
    if ( tuoGioco.isGiocabile( tuoGiocatore ) ) {
       tuoGioco.gioca( tuoGiocatore );
    } else {
       tuaTextArea.append( tuoGioco.getMotivazione() );
    }
    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Hello!?!?! VVoVe:
    Togli i System.out.println e metti return opportuni!
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    9
    E se invece facessi una cosa simile:
    Nella classe che poi andrà collegata alla user interface connector e poi alla gui dichiarassi una variabile di tipo
    codice:
    public class Partita{
    private String text;
    public void setString(String i){
             text=i;}
    public String getString(){
             return text}
    }
    e poi nell'altra classe dove è contenuto il mio metodo
    codice:
    public class Gioco{
    public void esegui(Giocatore gioc){
    		if(proprietario==null){
    			if(gioc.getDenaro()>costo)
    				gioc.acquistaProp(this, costo);
    			else
    				Partita.setString("Non hai abbastanza soldi");
    		}
    		else if(getProprietario()!=gioc.getName())
    			pagaProprietario(gioc);
    		else
    			Partita.setString("Ti trovi su un tuo terreno");
    	}
    }
    e poi nella grafica come potrei gestirlo?

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.