Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    2

    [Java] Problema con il repaint / redraw

    Salve a tutti, prima di tutto mi presento: sono Jacopo e, al mio secondo anno di Specialistica in Ingegneria Biomedica sono stato incaricato di compilare un semplice (per voi sicuramente) programma che riceve in ingresso da una porta COM un segnale, fa una piccola parte di elaborazione e ne plotta l'andamento su una finestra.
    Fino a qui tutto bene, per ottenere l'effetto che il prof voleva ottenere, cioè l'aggiornamento dei grafici in "stile ECG" ho dovuto implementare la funzione di disegno del grafico punto per punto, cancellando man mano che la "finestra mobile" scorre i punti precedentemente plottati.
    Questa cosa la faccio utilizzando un repaint che cancella i punti del grafico immediatamente successivi a quelli in cui mi trovo. Il comando lo uso sfruttando il fatto che posso dargli una finestra in cui operare di cui determino angolo in alto a sinistra e in basso a destra.
    Il problema è insorto quando ho plottato un'altro grafico sulla medesima finestra. (Devo plottare lo spettro di potenza del segnale).
    La natura di questo grafico è diversa da quella del grafico precedente:
    - In una classe riempio un array fino a 256 valori, a quel punto lo processo e passo l'array da plottare alla classe che disegna le funzioni vere e proprie.
    - Anche questo grafico lo disegno punto per punto.

    Il problema insorge su quando e come devo fare il repaint di quest'altra zona della finestra.
    Di seguito vi linko il codice di come faccio io in questo momento, quello che ottengo è che il grafico rimane plottato per pochi millesimi di secondo e poi sparisce. Per poi "riflashare" dopo altri 256 valori acquisiti. Ecco, io vorrei semplicemente che rimanesse li, e che il repaint venisse effettivamente fatto solo quando serve, cioè quando plotto un nuovo grafico.

    codice:
    if(counter==256){ 
    repaint(PADx, PADy, w-20, h-20); 
    for(int i = 1; i < data.length; i++) { 
    double x = PADx + i*xInc; 
    double y = h - 20 - scale*data[i]; 
    g2.draw(new Line2D.Double(xold, yold, x, y)); 
    g2.fill(new Ellipse2D.Double(x-2, y-2, 4, 4));
     xold=x; yold=y; } 
    counter=0; 
    }
    Scusate se non sono stato particolarmente chiaro, ho provato a esserlo e contemporaneamente non rubarvi troppo tempo, se così non fosse mi scuso. E' la prima volta che chiedo aiuto per qualcosa del genere.

    J.

  2. #2
    con queste 4 righe di codice è complicato capire l'errore, visto che si tratta anche di un errore concettuale che di programmazione.

    Cmq io al tuo posto avre usato altri tools.. JFreeChart o altri tool già belli e pronti...magari solo da capire un pò ma che ti avrebbero semplificato tutta la parte dei grafici.

    Prova a fare del Debug forse con quello riesci a capire il punto dove fai l'errore...
    Comunque chiamare il repaint dal paint stesso non è che sia la cosa migliore...
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

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.