1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| public class DemoCercles extends JPanel {
private final List<Ellipse2D> cercles=new ArrayList<>();
private Ellipse2D cercleEnCours;
public DemoCercles() {
MouseAdapter mouseAdapter = new MouseAdapter() {
private Point start;
@Override
public void mousePressed(MouseEvent e) {
start=e.getPoint();
cercleEnCours=createCercle(start, 0);
repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
cercleEnCours=createCercle(start, start.distance(e.getPoint()));
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
cercleEnCours=null;
Point end=e.getPoint();
if ( start.equals(end) ) {
int rayon = 20+(int) (Math.random()*50);
ajouteCercle(start,rayon);
}
else {
ajouteCercle(start,start.distance(end));
}
repaint();
}
private void ajouteCercle(Point centre, double rayon) {
Ellipse2D ellipse = createCercle(centre, rayon);
cercles.add(ellipse);
}
private Ellipse2D createCercle(Point centre, double rayon) {
return new Ellipse2D.Double(centre.getX()-rayon, centre.getY()-rayon, rayon*2, rayon*2);
}
};
addMouseListener(mouseAdapter);
addMouseMotionListener(mouseAdapter);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;
g.setColor(Color.BLACK);
for(Ellipse2D cercle : cercles) {
g2d.draw(cercle);
}
if ( cercleEnCours!=null ) {
g.setColor(Color.RED);
g2d.draw(cercleEnCours);
g2d.drawLine((int)(cercleEnCours.getCenterX()-1),(int)cercleEnCours.getCenterY(),(int)(cercleEnCours.getCenterX()+1),(int)(cercleEnCours.getCenterY()));
g2d.drawLine((int)cercleEnCours.getCenterX(),(int)(cercleEnCours.getCenterY()-1),(int)cercleEnCours.getCenterX(),(int)(cercleEnCours.getCenterY()+1));
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Démo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DemoCercles());
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
} |
Partager