Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problemi con jtextarea

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    5

    problemi con jtextarea

    Salve,
    ho una classe CampoGioco che mi da in output una stringa (system.out) e ho un'altra classe AreaPanel che contiene una Jtextarea. Vorrei stampare in questa jtextarea l'output di CampoGioco ma non ci riesco. In CampoGioco ho dichiarato un nuovo oggetto di tipo AreaPanel :

    //Campogioco.java

    ---
    AreaPanel ap = new AreaPanel();
    ap.area.setText(stringa);
    ----

    //AreaPanel.java

    JTextArea area = new JTextArea();
    add(area);

    dovrebbe funzionare cosi no?
    Sirio

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    area dev'essere pubblico e dichiarato come variabile d'istanza della classe. Dalle 2 righe che hai postato non si capisce, ma non vorrei che tu tentassi di accedere alla variabile interna di un metodo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    5
    Ho cambiato un pò le cose. Ho provato a fare un solo file ma niente. Ti mando il tutto
    In pratica, tutti i system.out che vedi devo poterli visualizzare nella JTextArea...

    public class CampoGioco {

    public int M;
    public int N;
    public Integer S = new Integer(0);
    Arbitro inizio = null;
    protected int numGiocatori;
    protected Giocatore campo[][];

    public CampoGioco(int righe,int colonne) {
    N = righe;
    M = colonne;
    campo = new Giocatore[N][M];
    System.out.println("INIZIO");
    this.inizializzaCampo();

    }

    public void inizializzaCampo() {
    numGiocatori = N;
    int colonna = 0;
    int riga = 0;
    ap = new GameFrame();
    for(riga = 0;riga < N;riga++){

    System.out.println(riga + " " + colonna);
    campo[riga][0] = new Giocatore(Integer.toString(riga+1),this,riga,colon na);
    }
    this.parteGioco();
    }

    public void parteGioco() {
    inizio = new Arbitro("Arbitro",this,0,0);

    for(Giocatore[] giocarr : campo){
    for(Giocatore gio : giocarr){
    if(gio != null)
    gio.start();
    }
    }
    inizio.start();
    }

    public void stampaCampo() {
    for(int i = 0;i<N;i++){
    for(int j = 0;j<M;j++){
    if(campo[i][j] == null)
    System.out.print("-\t");
    else
    System.out.print(campo[i][j] + "\t");
    }
    System.out.println();
    }

    }

    public static void main(String[] args) {

    JFrame frame = new GameFrame();
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE );
    frame.show();
    }

    }

    class GameFrame extends JFrame implements ActionListener {

    public JTextArea area;
    JButton start;
    CampoGioco g;
    JPanel panel;
    JButton chiudi;

    public GameFrame(){
    panel = new JPanel();
    area = new JTextArea();
    start = new JButton("START");
    chiudi = new JButton("CHIUDI");

    panel.setLayout(new GridLayout(2,1));
    setSize(400,400);
    setTitle("IL GIOCO DEI SACCHI");

    Container contentPane = getContentPane();
    contentPane.add(panel,"South");
    panel.add(start);
    contentPane.add(area,"Center");
    panel.add(chiudi);
    start.addActionListener(this);
    chiudi.addActionListener(new Chiudi());

    }

    public void actionPerformed(ActionEvent evt){

    Object sorg = evt.getSource();
    if(sorg == start)
    g = new CampoGioco(5,7);
    }

    }

    class Chiudi implements ActionListener{

    public Chiudi(){

    }

    public void actionPerformed(ActionEvent ev){
    System.exit(0);
    }
    }
    Sirio

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Beh, allora non usare System.out, ma scrivi dentro la JTextArea, non capisco dove sta il problema. Il GameFrame lo crei nel costruttore e lo memorizzi in una variabile privata. Poi fai
    codice:
    variabileGameFrame.area.append("Stringa da inserire");
    Non ti funziona cosi'?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    5
    NO, non mi funziona neanche cosi....
    Forse la JTextArea ha bisogno di un repaint() prima della scrittura?

    Allora ho rifatto tutto da capo ed ho rifatto le classi indipendenti : CampoGioco, GameFrame e AreaPanel.

    CampoGioco contiene le system.out che devo mettere sulla JTextArea
    GameFrame costruisce il frame
    AreaPanel contiene la JTextArea

    public class CampoGioco {

    public int M;
    public int N;
    public Integer S = new Integer(0);
    Arbitro inizio = null;
    protected int numGiocatori;
    protected Giocatore campo[][];
    AreaPanel ap;


    public CampoGioco(int righe,int colonne) {
    N = righe;
    M = colonne;
    campo = new Giocatore[N][M];
    System.out.println("INIZIO");
    this.inizializzaCampo();
    ap = new AreaPanel();
    }

    public void inizializzaCampo() {
    numGiocatori = N;
    int colonna = 0;
    int riga = 0;
    ap = new AreaPanel();
    for(riga = 0;riga < N;riga++){
    ap.area.append(riga + " " + colonna);
    //System.out.println(riga + " " + colonna);
    campo[riga][0] = new Giocatore(Integer.toString(riga+1),this,riga,colon na);
    }
    this.parteGioco();
    }

    public void parteGioco() {
    inizio = new Arbitro("Arbitro",this,0,0);

    for(Giocatore[] giocarr : campo){
    for(Giocatore gio : giocarr){
    if(gio != null)
    gio.start();
    }
    }
    inizio.start();
    }

    public void stampaCampo() {
    for(int i = 0;i<N;i++){
    for(int j = 0;j<M;j++){
    if(campo[i][j] == null)
    ap.area.setText("-\t");
    //System.out.print("-\t");
    else
    System.out.print(campo[i][j] + "\t");
    }
    System.out.println();
    }

    }
    }

    public class AreaPanel extends JPanel{

    JTextArea area;

    public AreaPanel() {

    area = new JTextArea();
    add(area,BorderLayout.NORTH);

    }


    }

    COSA STO SBAGLIANDO?
    Sirio

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    A me il metodo append fuziona (ci mancherebbe che le API di java si mettessero a raccontare frottole). Niente repaint() perche' non cambia la parte grafica, ma solo il contenuto testuale.
    Prima probabilmente avevi definito la variabile di tipo JFrame invece che di tipo GameFrame e non ti faceva accedere ad area,

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.