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

    MoseMoved non funziona a dovere

    Ciao a tutti, sto tentando di fare una faccia animata in ci gli occhi seguono il mouse ma ho un problema, tutto dentro un'applet:
    questa è l'applet:
    codice:
    DisegnaSuApplet disegno = new DisegnaSuApplet(schermo); //raccoglie i metodi per disegnare cerchi, rettangoli, ...		
    CostruzioneFaccina faccina = new CostruzioneFaccina(schermo); //insieme di metodi che disegnano la base della faccia
    mouse = new AscoltatoreMovimentoMouse((Graphics2D) schermo); //classe in cui è possibile rilevare le posizione del mouse
    this.addMouseMotionListener(mouse); //implementazione
    Classe AscoltatoreMovimentoMouse
    codice:
    public void mouseMoved(MouseEvent oggettoEvento) {
    	System.out.println("Posizione : " + oggettoEvento.getX() + " " + oggettoEvento.getY()); //funziona
    	CostruzioneFaccina disegno = new CostruzioneFaccina();
    	disegno.crea(5, 5, schermo); //Non funziona!!!!
    	}
    Ecco il metodo "crea" che, per il momento disegna un rettangolo colorato (per il momento, per provare se disegnava al movimento del mouse)
    codice:
    protected void crea(int x, int y, Graphics2D schermoPassato) {
    	schermo = schermoPassato;
    	foglio = new DisegnaSuApplet(schermo);
    	foglio.disegnaRettangoloPieno(x, y, 100, 100, Color.BLACK);
    	}
    In quale parte risiede il problema? La faccina viene disegnata correttamente, in consolle quando il mouse di sposta si vede (le coordinate del mouse ci sono e cambiano al cambiar posizione del puntatore) ma non viene disegnato il rettangolo. Perché?
    Grazie mille a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Generalmente per disegnare su un JPanel si utilizza il metodo paintComponent(Graphics g);
    Ogni volta che vuoi un operazione di ridisegno (magari un nuovo elemento da inserire o cose di questo tipo) chiami repaint();

    Spero di essere stato chiaro ^^

  3. #3
    Non c'è nessun JPanel in questo caso, purtroppo

    Ora ho migliorato il codice sorgente ma senza successo

    Allora, nell'applet ho:
    codice:
    DisegnaSuApplet disegno = new DisegnaSuApplet(schermo);		
    		CostruzioneFaccina faccina = new CostruzioneFaccina(schermo);
    		mouse = new AscoltatoreMovimentoMouse(faccina, (Graphics2D)schermo);
    		this.addMouseMotionListener(mouse);
    Classe AscoltatoreMovimentoMouse
    codice:
    private CostruzioneFaccina faccina;
    	private Graphics2D schermo;
    	
    	public AscoltatoreMovimentoMouse(CostruzioneFaccina faccinaPassata, Graphics2D schermoPassato) {
    		faccina = faccinaPassata;
    		schermo = schermoPassato;
    	}
    public void mouseMoved(MouseEvent oggettoEvento) {
    		System.out.println("Posizione : " + oggettoEvento.getX() + " " + oggettoEvento.getY()); //funziona correttamente!
    		faccina.crea(schermo); //non funziona  >:(
    	}
    E poi in CostruzioneFaccina:
    codice:
    protected void crea(Graphics2D schermoPassato) {
    		schermo = schermoPassato;
    		foglio = new DisegnaSuApplet(schermo);
    		foglio.disegnaRettangoloPieno(10, 10, 100, 100);
    	}
    ma non funziona!

  4. #4

    Movimento mouse e disegno

    Ciao, ho una classe che crea un'animazione semplice: al movimento del mouse viene creato un cerchietto verde. Solo che questo cerchietto non viene mai creato!
    Ecco qui i due file:

    Faccina.java
    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class Faccina extends JApplet implements MouseMotionListener {
    
    	private CostruzioneFaccina faccina;
    	
    	public void init() {
    		this.addMouseMotionListener(this);
    	}
    	
    	public void start() {}
    	
    	public void paint(Graphics schermo) {
    		faccina = new CostruzioneFaccina(schermo);
    	}
    
    	public void mouseMoved(MouseEvent oggettoEvento) {
    		System.out.println(oggettoEvento.getX() + " " + oggettoEvento.getY());
    		faccina.crea();
    		repaint();
    	}
    	
    	public void mouseDragged(MouseEvent oggettoEvento) {
    	}	
    	
    }
    CostruzioneFaccina.java
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class CostruzioneFaccina {
    
    	private Graphics schermo;
    	private DisegnaSuApplet foglio;
    	private final int GRANDEZZA = 	600;
    	
    	public CostruzioneFaccina(Graphics schermoPassato) {
    		schermo = schermoPassato;
    		foglio = new DisegnaSuApplet(schermo);
    		costruisciTesta();
    		costruisciNaso();
    		costruisciOcchi();
    		costruisciPupille();
    	}
    
         ................................. altro codice ...............
    protected void crea() {
    		foglio.disegnaCerchioPieno((int)(GRANDEZZA*0.30), (int)(GRANDEZZA*0.25), (int)(GRANDEZZA*0.12), Color.GREEN);
    	}
    Perché non mi viene disegnato il cerchietto??? In quale punto sbaglio?
    Grazie a tutti per l'aiuto!!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Io in paint() non vedo il codice per il disegno...
    Devi utilizzare il Graphics di quel metodo. repaint() non fa altro che chiamare paint().

  6. #6
    Grazie Patrick!
    Allora tutti i metodi per disegnare sono riassunti nella classe CostruisciFaccina (metodi come costruisciTesta, costruisciNaso) e funzionano perfettamente.
    Purtroppo non riesco a capire dove sbaglio e come potrei ovviare al mio problema: al momento mi basterebbe che al movimento del mouse mi venga disegnata una figura (ad esempio: un rettangolo). Come potrei fare?

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    All'ingresso in paint() invoca super.paint(schermo);

    Se non funziona comunque, domani ti rispondo meglio, ora si sta facendo tardi

  8. #8
    Grazie! A domani e buonanotte!

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.