Visualizzazione dei risultati da 1 a 3 su 3

Discussione: linea su imageCanvas

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

    linea su imageCanvas

    Ciao ragazzi,
    devo disegnare una linea retta su ImageCanvas contenuto in una JDialog.
    Devo fare il tutto gestendo gli eventi del mouse, quindi anche il drag.
    Potete darmi una dritta?
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Questo esempio mi sembra che funzioni:
    http://www.java2s.com/Tutorial/Java/...raganddraw.htm

    basta che sostituisci la funzione makeRectangle con:
    codice:
    private Line2D.Float makeRectangle(int x1, int y1, int x2, int y2) {
          return new Line2D.Float(x1, y1, x2, y2);
    }
    Dovresti anche sostituire giusto i nomi "Rectangle" con Line.

    Ha anche un effetto con i colori mentre disegna la linea che magari non ti interessa e puoi rimuovere.

    EDIT: mi è sfuggito che utilizzi ImageCanvas, classe che non conosco, al limite l'esempio ti può servire per vedere la procedura.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    Ho provato a sistemare il codice. Ma non riesco ad ottenere due cose:
    1. deve disegnarmi una sola linea, cioè quando clicco per farne un'altra mi deve cancellare la precedente
    2. il drag non funziona correttamente infatti fa tutte le righe grigio. Io vorrei vedere il drag della linea che sto disegnando.

    Grazie
    In allegato la figura

    codice:
    aggiungo ImageCanvas alla JDialog
       add(ic);
    creo un'istanza della classe 
    LineRoi lr=new LineRoi(ic);
    
    
    public class LineRoi {
          
         ArrayList<Shape> shapes = new ArrayList<Shape>();
         private ImageCanvas ic;
         private Graphics g;
         Point startDrag, endDrag;
      
         public LineRoi(ImageCanvas imp){
            ic=imp;
            g=ic.getGraphics();
         
            ic.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e){
                    startDrag=new Point(e.getX(), e.getY());
                    endDrag = startDrag;
                    disegna();
                }
        
                public void mouseReleased(MouseEvent e) {
                     Shape r = new Line2D.Float(startDrag.x, startDrag.y, e.getX(), e.getY());
                     shapes.add(r);
                     startDrag = null;
                     endDrag = null;
                     disegna();             
                }
            });
            
            ic.addMouseMotionListener(new MouseMotionAdapter(){
                public void mouseDragged(MouseEvent e){
                    endDrag = new Point(e.getX(), e.getY());
                    disegna();
                }
            });
        }
         
        public void disegna(){
            Graphics2D g2=(Graphics2D) g;
            for (Shape s : shapes) {
                g2.setPaint(Color.RED);
                g2.draw(s);
                g2.fill(s);
            }
            if (startDrag != null && endDrag != null) {
                g2.setPaint(Color.LIGHT_GRAY);
                Shape r = new Line2D.Float(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
                g2.draw(r);
            }        
        }
    
    }
    Immagini allegate Immagini allegate

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.