Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220

    [JAVA] repaint()

    ciao ragassi ho un altro problema...
    dunque, quando richiamo il metodo repaint() del JPanel su cui sto disegnando tutto il disegno si cancella. non si può fare in modo che rimanga? io devo per forza richiamare repaint() perchè devo disegnare con il mouse e quindi l'evento mousePressed della mia classe che implementa MouseListener deve segnalare che ho cambiato qualcosa nella 'tela'.
    come fo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    11

    precisazione

    Non so di preciso se è ciò che ti serve (dovrei dare un'occhiata al codice) comunque il tuo disegno lo "crei" il paintComponent() ?
    take take take

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.Graphics;

    public class Grid extends JPanel {
    int stepX,stepY;
    boolean paint;
    boolean loading;
    int pointX,pointY;

    public Grid(int gw,int gh){
    setSize(gw,gh);
    stepX=gw/40;
    stepY=gh/30;
    paint=false;
    loading=true;

    addMouseListener(new GridListener());
    }

    private void drawGrid(Graphics g) {
    for (int i = 1; i < 40; i++) {
    g.drawLine(i*stepX, 0, i*stepX, i*getHeight());
    }
    for (int j = 1; j < 30; j++) {
    g.drawLine(0, j*stepY, getWidth(), j*stepY);
    }
    }

    public void paintComponent(Graphics g) {
    super.paintComponent(g);

    if (loading){
    drawGrid(g);
    loading=false;
    }
    if (paint){
    g.fillRect(pointX*stepX, pointY*stepY, (pointX + 1)*stepX, (pointY + 1)*stepY);
    }
    }

    public class GridListener implements MouseListener{
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}

    public void mousePressed(MouseEvent e) {
    pointX=e.getX()/stepX;
    pointY=e.getY()/stepY;
    paint = true;
    repaint();
    }

    public void mouseReleased(MouseEvent e) {
    paint = false;
    }
    }
    }

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    quando ricevi gli eventi del mouse che rappresentano azioni di disegno da parte dell'utente devi "modificare" un'oppportuna struttura dati che mantiene tutte le operazioni di disegno effettuate. Il metodo paintComponent non deve far altro che riprodurre tutte le operazioni di disegno registrate in questa struttura dati. Ad esempio, se l'untente sposta il mouse tenendolo premuto, dal punto x1-y1 al punto x2-y2 il gestore dell'evento aggiungerà ad una lista questa coppia di punti. Il metodo paintComponent si passa in rasssegna la lista e disenga ogni segmento di retta disegnato all'utente, non solo l'ultima aggiunto.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

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 © 2024 vBulletin Solutions, Inc. All rights reserved.