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

    [JAVA] update sulla classe canvas

    Salve,
    ho un piccolo problema che non riesco a risolvere.

    Devo prima disegnare dei componenti (grafici) su un Canvas(e fin qui tutto ok con il metodo paint(Graphics)). Devo poi creare un metodo che mi permetta di aggiungere sul canvas un nuovo componente (ad esempio un quadrato) ogni volta che questo viene invocato(senza però ridisegnare da capo l'intero Canvas).

    HO risolto parzialmente ridefinendo il metodo update(Graphics) (facendo in modo chedisegna appunto un componente) e poi richiamando repaint(). In questo modo funziona (nel senso che ad ogni invocazione disegna un componente ) ma mi cancella quelli disegnati nei precedenti repaint(). Cioè se voglio disegnare ad esempio due quadrati e faccio due volte il repaint mi disegna solo il secondo (cancellando il primo).

    Se serve posso postare anche il codice (spero cmq di essermi spiegato).

    Ringrazio anticipatamente.

  2. #2
    Ecco il codice. Devo chiamare 2(o più volte il metodo disegna)

    public class pannello_visualizza_frame extends Canvas {
    static final int RIGHE = 50;
    static final int COLONNE = 40;

    private int num_frame;
    private int frame_attuale = 1;
    private Color colore = Color.GREEN;

    BorderLayout borderLayout1 = new BorderLayout();

    public pannello_visualizza_frame(int numero) {
    this.num_frame = numero;
    try {
    jbInit();
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }

    void setta_num_frame(int num) {
    this.num_frame = num;
    }

    void jbInit() throws Exception {
    this.setSize(600, 600);

    }

    public void disegna(int numero) {
    this.frame_attuale = numero;
    repaint();
    }

    public void update(Graphics g) {
    //Graphics g=this.getGraphics();
    for (int app = 0; app < this.frame_attuale; app++) {
    g.setColor(this.colore);
    int sizex = getSize().width;
    int sizey = getSize().height;
    int riga = (app / RIGHE) * (sizey / RIGHE);
    int colonna = (app % COLONNE) * (sizex / COLONNE);
    g.fillRect(colonna + 1, riga + 1, (sizex / COLONNE) - 3,
    (sizey / RIGHE) - 3);
    }

    }


    public final void paint(final Graphics g) {
    int sizex = getSize().width;
    int sizey = getSize().height;
    int app = 0;
    g.setColor(Color.BLUE);
    for (int j = 0; j < RIGHE; j++) {
    for (int i = 0; i < COLONNE; i++) {
    if ((app++) < this.num_frame)
    g.drawRect((i * sizex) / COLONNE, (j * sizey) / RIGHE,
    sizex / COLONNE - 2, sizey / RIGHE - 2);
    else
    break;
    }
    }
    }

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.