Visualizzazione dei risultati da 1 a 10 su 10

Discussione: doppio click mouse

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140

    doppio click mouse

    Ciao ragazzi,
    ho il seguente problema: nel codice che vi posto dovrei alla pressione del mouse effettuare diverse azioni a seconda del tool selezionato. In particolare se seleziono il numero 1 dovrei effettuare lo zoom di un'immagine. Il problema è che mi richiama due volte il metodo mousePressed e quindi mi fa sempre lo zoom doppio. Dove sbaglio?

    Grazie

    codice:
    public class MyCanvas extends ImageCanvas  implements MouseListener, MouseMotionListener{
        
        protected MyImagePlus imp;
        public int imageWidth, imageHeight;
        private int dstWidth, dstHeight;
        private double magnification;   
        private Point startPoint, endPoint, halfPoint, clickPoint, mouse;
        private Image drawing;
        private Graphics2D drawGraphics;
        protected Rectangle srcRect;
        Line l;
        //punto da modificare 0=startPoint, 1=endPoint, 2=halfPoint
        int mod;
        boolean drag;
        
        public MyCanvas(MyImagePlus imp) {
            super(imp);   
            this.imp = imp;
            int width = imp.getWidth();
            int height = imp.getHeight();
            imageWidth = width;
            imageHeight = height;
            srcRect = new Rectangle(0, 0, imageWidth, imageHeight);
            dstWidth = width;
    	dstHeight = height;
            setSize(width, height);
            magnification = 1.0;
            addMouseListener(this);
            addMouseMotionListener(this);
        }
    	      
    //-----------------------------------------
    //------------>  EVENTI MOUSE <------------
    //-----------------------------------------
            
        public void mousePressed(MouseEvent evt) {  
            System.out.println("mousePressed");
            if(ImageTools.getToolSel()==0){
                drag=false;  
                Line roi = (Line) imp.getRoi();
                //se è su uno dei quadratini
                if(getCursor().equals(handCursor)){ 
                    clickPoint = evt.getPoint(); 
                }
                //devo disegnare la nuova linea
                else{
                    startPoint = null;
                    endPoint = null;
                    if (SwingUtilities.isLeftMouseButton(evt)) {
                        startPoint = evt.getPoint(); 
                        repaint();     
                    }
                } 
            }
            else if(ImageTools.getToolSel()==1){  System.out.println("selezionato zoomin");
                int x = evt.getX();
                int y = evt.getY();
                zoomIn(x, y);
            }
            else if(ImageTools.getToolSel()==2){
                int x = evt.getX();
                int y = evt.getY();
                zoomOut(x, y);
            } 
        }
    
        public void mouseDragged(MouseEvent evt) {  
            if(ImageTools.getToolSel()==0){
                drag=true;
                Line roi = (Line) imp.getRoi();
                //se è su uno dei quadratini
                if(getCursor().equals(handCursor)){
                    //cambio il punto che ho cliccato
                    if(mod==0)
                        startPoint = evt.getPoint(); 
                    if(mod==1)
                        endPoint = evt.getPoint(); 
                    if(mod==2){
                        halfPoint = evt.getPoint(); 
                        //calcolo di quanto si è spostato il punto
                        int diffPointX1=halfPoint.x-clickPoint.x;
                        int diffPointY1=halfPoint.y-clickPoint.y;
                        //il nuovo clickPoint diventa il drag
                        clickPoint=halfPoint;
                        //aggiorno lo start e end
                        startPoint.x=startPoint.x+diffPointX1;
                        startPoint.y=startPoint.y+diffPointY1;
                        endPoint.x=endPoint.x+diffPointX1;
                        endPoint.y=endPoint.y+diffPointY1;
                    }
                }
                //è il drag di una nuova linea
                else{    
                    endPoint=evt.getPoint(); 
                }
                //info line
                if(roi!=null)
                       ImageTools.updateInfoLine(startPoint.x,startPoint.y,(int)roi.getLength(),endPoint.x,endPoint.y);
                repaint();  
            }
        }
    
        public void mouseReleased(MouseEvent evt) {
            System.out.println("Mouse released");
            if(ImageTools.getToolSel()==0 ){
                repaint();
                if(drag==true){  
                    drag=false;
                    //aggiorno il punto centrale della linea (l'endPoint si è aggiornato con il drag)
                    //non potevo metterlo nel drag perchè all'inizio la roi non c'è
                    Line roi = (Line) imp.getRoi();
                    int halfPointX=(int)(roi.getBounds().x+(roi.getBounds().width)/2);
                    int halfPointY=(int)(roi.getBounds().y+(roi.getBounds().height)/2);
                    halfPoint=new Point(halfPointX,halfPointY);     
                }
            }
        }
        
        @Override
        public void mouseClicked(MouseEvent evt) {
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
            }
    
        @Override
        public void mouseExited(MouseEvent e) {
           }
    
        @Override 
        public void mouseMoved(MouseEvent e) {
            if(ImageTools.getToolSel()==0){
                int mx = e.getX();
                int my = e.getY();  
                mouse=new Point(mx,my);
                setCursor(mx, my);
            }
        }
            
        public void update(Graphics g){
            paint(g);
        }
    
        public void paint(Graphics g) {
            final int drawWidth = (int)(imageWidth*magnification);
            final int drawHeight = (int)(imageHeight*magnification);
            if(drawing==null){
                drawing=createImage(drawWidth, drawHeight);
                drawGraphics=(Graphics2D)drawing.getGraphics();
            } 
            //per contrasto
            if (imageUpdated) {
                imageUpdated = false;
                imp.updateImage();
            }
            Image img = imp.getImage();
    	if (img!=null)
                drawGraphics.drawImage(img, 0, 0, drawWidth, drawHeight,
    	        srcRect.x, srcRect.y, srcRect.x+srcRect.width, srcRect.y+srcRect.height, null);
                    
            if(startPoint!=null && endPoint!=null){
                drawGraphics.setPaint((Color.YELLOW));
                drawGraphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
                l=new Line(startPoint.x,startPoint.y,endPoint.x,endPoint.y);
                //devo settare immagine altrimenti non funziona plot
                l.setImage(imp);
                l.setWidth(l.getWidth());
                l.draw(drawGraphics);  
                //aggiungo roi a MyImagePlus
                imp.setRoi(l);  
            }   
            g.drawImage(drawing, 0, 0, null);
        }
            
        //--------------------------
            public void zoomIn(int x, int y) { 
                if (magnification>=32)
    			return;
    		double newMag = magnification*2;
    		if (newMag==1.0) {
    			return;
    		}
    		int newWidth = dstWidth*2;
    		int newHeight = dstHeight*2;
                    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    		ImageView iv = WindowManagerCCD.getCurrentWindow();
    		Point loc = iv.getLocationOnScreen();
                    if ((loc.x+50+newWidth)<screen.width && (loc.y+50+newHeight)<screen.height) {
                        setDrawingSize(newWidth, newHeight);
    			iv.pack();
    		}
    		else {
    			int w = (int)Math.round(dstWidth/newMag);
    			if (w*newMag<dstWidth) w++;
    			int h = (int)Math.round(dstHeight/newMag);
    			if (h*newMag<dstHeight) h++;
    			x = offScreenX(x);
    			y = offScreenY(y);
    			Rectangle r = new Rectangle(x-w/2, y-h/2, w, h);
    			if (r.x<0) r.x = 0;
    			if (r.y<0) r.y = 0;
    			if (r.x+w>imageWidth) r.x = imageWidth-w;
    			if (r.y+h>imageHeight) r.y = imageHeight-h;
    			srcRect = r;
    		}
                    //imposto nuova magnification
    		this.magnification = newMag;
    		repaint();
    	}

  2. #2
    Sei sicuro?
    quindi vedi due volte la scritta "mousePressed" sullo standard output?
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    si esatto due volta la scritta. E succede la stessa cosa per il released. Grazie

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ti serve per forza il mousePressed?

    Altrimenti leggi qua
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    si mi servirebbe il mousePressed perchè il mouse clicked registra la pressione e il rilascio. Io voglio faccia lo zoom quando spingo il tasto del mouse. Però aggiungo che ho provato anche con il mouse clicked e lo stesso viene doppio...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    sto usando netbeans... ma ho provato anche a fare il jar e vedere se magari era un problema del run di netbeans ma niente lo zomm è sempre doppio

  7. #7
    Non conosco Netbeans(uso eclipse).
    Hai provato a fare un debug e vedere linea x linea fino a vedere il perché fa zoom doppio?
    Ci puoi fornire un esempio funzionante? xche qui ci sono altre classi di cui non abbiamo evidenza quindi difficilmente sappiamo cosa ci può essere sotto.
    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    Ora provo con il debug grazie.
    Scusa ma cosa intendi per esempio funzionante? Di quali classi vuoi posti il codice?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    Con il debug non riesco a trovare l'errore. Qualcuno sa aiutarmi? Grazie

  10. #10
    Solitamente quando ho un grosso progetto di cui non riesco a trovare l'errore cerco di estrarre quella parte di codice, crearmi un progetto più piccolino e fare le mie prove su quella parte.
    Dovresti fare una cosa del genere anche te, altrimenti guardando così è un pò difficile soprattutto se si tratta di un errore concettuale, e non di codice, nascosto tra centinaia di righe.

    Comunque mi sembra strano che non riesci a trovare nulla col debug
    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.