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

    mouseDown all'interno di un poligono

    ciao ragazzi, sono un totale principiante con java. sto cercando di imparare i fondamenti della programmazione con il materiale che si trova on-line. Vorrei creare un applet che disegni un poligono qualunque e all'interno di questo poligono (solamente all'interno) ogni volta che clicco con il mouse venga disegnato un piccolo cerchio. Se mi trovo al di fuori di tale poligono vorrei che non succedesse nulla. Ho disegnato il poligono, ho la funzione che disegna il cerchio ogni qual volta clicco con il mouse ma non so come fare per far si che questo avvenga solamente dentro al poligono.

    Grazie dell'aiuto.
    Antonio

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da AntonioG Visualizza il messaggio
    Ho disegnato il poligono, ho la funzione che disegna il cerchio ogni qual volta clicco con il mouse ma non so come fare per far si che questo avvenga solamente dentro al poligono.
    Il punto è come è "modellato" il poligono. Se hai usato java.awt.Polygon, esso ha i comodi contains(Point p) (e altre versioni in overload).
    Se l'hai rappresentato in altro modo ..... è tutto da vedere e valutare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il punto è come è "modellato" il poligono. Se hai usato java.awt.Polygon, esso ha i comodi contains(Point p) (e altre versioni in overload).
    Se l'hai rappresentato in altro modo ..... è tutto da vedere e valutare.
    Grazie andbin, ho usato polygon. Almeno adesso so verso cosa mi devo orientare. comincio a documentarmi sui contains.
    grazie del suggerimento
    Antonio

  4. #4
    ciao, ho provato a usare contains ma ancora non riesco a ottenere quello che vorrei. ti mando il piccolo codice didattico che avevo creato. potresti, per favore, dirmi dove ho sbagliato?

    codice:
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class ClickPunti<mouseDown> extends java.applet.Applet {
        
    Polygon p=new Polygon();
    
    Graphics g= getGraphics();
    
    public void paint(Graphics g) {
                
        p.addPoint(5*50,2*50);
        p.addPoint(5*50,1*50);
        p.addPoint(3*50,2*50);
        p.addPoint(3*50,5*50);
        p.addPoint(8*50,4*50);
        p.addPoint(8*50,1*50);
    
            
        g.setColor(Color.black);
        g.drawPolygon(p);
        
    }
        public boolean mouseDown (Event e, int x, int y){
            
            if (p.contains(x, y)){
            g.fillRect(x-2, y-2, 4, 4);
            }
            
            return true;
            
        }
    
    }
    Ultima modifica di LeleFT; 12-11-2013 a 16:23 Motivo: Aggiunta tag CODE

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da AntonioG Visualizza il messaggio
    ciao, ho provato a usare contains ma ancora non riesco a ottenere quello che vorrei. ti mando il piccolo codice didattico che avevo creato. potresti, per favore, dirmi dove ho sbagliato?
    Ci sono diverse cose che non vanno e non hanno senso.

    1) quel <mouseDown> non dà errori di compilazione (è la dichiarazione di una type variable) ma non ha senso e non serve.
    2) quel Graphics g= getGraphics(); non ha senso e non serve.
    3) aggiungere punti nel paint non va nemmeno bene, visto che il Polygon è "di istanza", ad ogni minimo paint aggiungeresti un sacco di punti.
    4) fare un g.fillRect non è appropriato (non così perlomeno) nel contesto della gestione di un evento.
    5) usare mouseDown è sconsigliabile (tra l'altro è un metodo "deprecato" = da non usare più). Sarebbe più appropriato registrare un MouseListener.

    Insomma, è tutto da rifare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Guarda e magari prova la seguente applet (basta che la applet abbia una superficie di 200x200 pixel).
    Disegna un poligono che normalmente è blu. Quando ci passi esattamente sopra con il mouse, il poligono si colora di rosso.
    Anche se non ti fosse tutto chiaro, soffermati su come viene gestito il ri-disegno della applet. Ovvero sul fatto che i metodi degli eventi del mouse non disegnano direttamente qualcosa ma cambiano solo lo stato di una variabile di "flag" che indica se il mouse è "sopra" e poi chiedono il repaint asincrono.

    Per qualunque dubbio, chiedi pure.

    codice:
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class PoligonoApplet extends Applet {
        private Polygon poligono;
        private boolean isOver;
    
        public void init() {
            try {
                EventQueue.invokeAndWait(new Runnable() {
                    public void run() {
                        initGui();
                    }
                });
            } catch (Exception e) {
                System.err.println("initialization failed");
            }
        }
    
        private void initGui() {
            poligono = new Polygon();
            poligono.addPoint(75, 30);
            poligono.addPoint(120, 60);
            poligono.addPoint(90, 75);
            poligono.addPoint(130, 130);
            poligono.addPoint(65, 120);
            poligono.addPoint(20, 75);
    
            addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseMoved(MouseEvent e) {
                    isOver = poligono.contains(e.getPoint());
                    repaint();
                }
    
                public void mouseExited(MouseEvent e) {
                    isOver = false;
                    repaint();
                }
            });
        }
    
        public void paint(Graphics g) {
            super.paint(g);
    
            if (isOver) {
                g.setColor(Color.RED);
            } else {
                g.setColor(Color.BLUE);
            }
    
            g.fillPolygon(poligono);
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.