Autor Tema: Dibujar más de una figura circulos en Java con Ellipse2D JFrame Graphics2D tapiz  (Leído 3634 veces)

Kenzo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola, estoy haciendo un pequeño programa en java el cual es que, cuando hagamos clic izquierdo sobre el Frame se dibuje un circulo, y al hacer otra vez clic se dibuje otro circulo, pero que el primer circulo no se borre y el segundo circulo cambie de color, y así hasta tapizar el Frame de círculos de diferentes colores.

Tengo el 80% del programa hecho, a excepción de que se almacenen los círculos.


Código del programa:

Código: (java) [Seleccionar]
package Graficos;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Graficos2D {
public static void main(String[] args) {
Marco NewMarco = new Marco();
NewMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class Marco extends JFrame {
int x;
        int y;
        int radio;
public Marco() {
setVisible(true);
setSize(500,500);
x = getSize().width/2;
                y = getSize().height/2;
setTitle("Dibujando Circulos");
        addMouseListener(new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseMoved(e);
                x=e.getX();
                y=e.getY();
                repaint();
            }
        });
}
@Override
public void paint(Graphics g) {
super.paint(g);
                radio = 25;
Random r = new Random();
Graphics2D g2=(Graphics2D) g;
g2.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
Ellipse2D circulo=new Ellipse2D.Float(x-radio, y-radio, radio*2, radio*2);
g2.fill(circulo);
}
        class EventoMouse {
            public EventoMouse(){
            }
        }
}


He estado investigando cómo hacer, pero no mas salgo confundido . . . Sé que se puede hacer con un ArrayList, pero no logro hacer que funciones.

Realmente espero y me puedan ayudar.
« Última modificación: 05 de Junio 2018, 19:23 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, hay varias formas de resolver la cuestión de no perder lo dibujado una vez se añaden elementos a un dibujo en Java. Aquí dejo un código que muestra una posible solución, aunque no digo que esta sea la única (ni la mejor).

Código: [Seleccionar]

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyPanel extends JPanel implements MouseListener
{
    private ArrayList<Point> points = new ArrayList<>();

    public MyPanel() {
        super();
        addMouseListener(this);
    }

    @Override public void mouseEntered(MouseEvent e) { }

    @Override public void mouseExited(MouseEvent e) { }

    @Override public void mouseClicked(MouseEvent e) { }

    @Override public void mousePressed(MouseEvent e) { }

    @Override public void mouseReleased(MouseEvent e) {
        points.add(new Point(e.getX(), e.getY()));
        repaint();
    }

    @Override public void paint(Graphics g) {
        super.paint(g);
        for (Point p : points)
            g.fillOval(p.getX(), p.getY(), 10, 10);
    }
   
    public static void main(String[] args) {
    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setLocationRelativeTo(null);

    MyPanel myPanel = new MyPanel();

    frame.add(myPanel);
    frame.setVisible(true);
}
}

class Point
{
    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".