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);
}
}
}