elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Java] Repintar una figura y utilizar un ArrayList en un JFrame [Resuelto]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Java] Repintar una figura y utilizar un ArrayList en un JFrame [Resuelto]  (Leído 4,942 veces)
Ahinoam

Desconectado Desconectado

Mensajes: 25


Fue divertido y estresante hacer el código


Ver Perfil
[Java] Repintar una figura y utilizar un ArrayList en un JFrame [Resuelto]
« en: 28 Noviembre 2017, 20:32 pm »

Hola, estoy realizando un pequeño programa que al hacer clic en el panel se dibuje un circulo y que cuando vuelva a dar clic se dibuje otro circulo pero, sin que se borre el primer circulo y que el segundo circulo cambie de color.

Lo que tengo hasta ahora es el puro Frame, con el circulo y cuando hago clic, dibuja otro circulo de otro color, pero se borra el primer circulo. He estado viendo un sin fin de vídeos tutoriales, visitando muchas paginas, pero solamente me confundo.


Mi código es el siguiente:
Código
  1. package Graficos;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.GraphicsEnvironment;
  7. import java.awt.event.MouseAdapter;
  8. import java.awt.event.MouseEvent;
  9. import java.awt.event.MouseListener;
  10. import java.awt.geom.Ellipse2D;
  11. import java.util.ArrayList;
  12. import java.util.Random;
  13. import javax.swing.JFrame;
  14. import javax.swing.JPanel;
  15.  
  16. public class Graficos2D {
  17. public static void main(String[] args) {
  18. Marco NewMarco = new Marco();
  19. NewMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  20. }
  21. }
  22. class Marco extends JFrame {
  23. int x;
  24.        int y;
  25.        int radio;
  26. public Marco() {
  27. setVisible(true);
  28. setSize(500,500);
  29. x = getSize().width/2;
  30.                y = getSize().height/2;
  31. setTitle("Dibujando Circulos");
  32.        addMouseListener(new MouseAdapter(){
  33.            @Override
  34.            public void mouseClicked(MouseEvent e) {
  35.                super.mouseMoved(e);
  36.                x=e.getX();
  37.                y=e.getY();
  38.                repaint();
  39.            }
  40.        });
  41. }
  42. @Override
  43. public void paint(Graphics g) {
  44. super.paint(g);
  45.                radio = 25;
  46. Random r = new Random();
  47. g2.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
  48. Ellipse2D circulo=new Ellipse2D.Float(x-radio, y-radio, radio*2, radio*2);
  49. g2.fill(circulo);
  50. }
  51.        class EventoMouse {
  52.            public EventoMouse(){
  53.            }
  54.        }
  55. }
  56.  

Tengo el evento mouseClicked, pero no almacena los círculos nuevos, vi que se puede hacer con un ArrayList. Entiendo como debería funcionar, pero no se como implementarlo a mi código.

Realmente espero y me puedan ayudar


« Última modificación: 4 Diciembre 2017, 21:17 pm por Ahinoam » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [Java] Utilizar un ArrayList en un JFrame
« Respuesta #1 en: 29 Noviembre 2017, 20:10 pm »

Sin ir más lejos, lo evidente:
Código
  1. Graphics2D g2=(Graphics2D) g;
  2. g2.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
  3. Ellipse2D circulo=new Ellipse2D.Float(x-radio, y-radio, radio*2, radio*2);
  4. g2.fill(circulo);
Estás pintando 1 círculo.

Si quieres pintar 2 cídruclos, tendrás que ponerlo.
Si quieres pintar indefinidos círculos, tendrás que hacerlo con ciclos, como for.

Lo primero: ¿Trabajaste alguna vez con ArrayList, LinkedList, List o arrays? Si la respuesta es no, es lo primero, antes de mezclarlo con los gráficos.
Si ya has trabajado con alguno, entoncces la dinámica es: En el evento de click, almacenar un nuevo punto (x,y) en el array/lista. En paint(), recorrer la lista y dibujarlos todos.
Son 2 pasos bien diferenciados, obtener datos y utilizar esos datos. Empieza por ahí.

Acerca de almacenar los puntos, puedes crear una clase "Punto{ int x; inty; }".


En línea

Ahinoam

Desconectado Desconectado

Mensajes: 25


Fue divertido y estresante hacer el código


Ver Perfil
Re: [Java] Utilizar un ArrayList en un JFrame
« Respuesta #2 en: 30 Noviembre 2017, 00:34 am »

Sin ir más lejos, lo evidente:
Código
  1. Graphics2D g2=(Graphics2D) g;
  2. g2.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
  3. Ellipse2D circulo=new Ellipse2D.Float(x-radio, y-radio, radio*2, radio*2);
  4. g2.fill(circulo);
Estás pintando 1 círculo.

Si quieres pintar 2 cídruclos, tendrás que ponerlo.
Si quieres pintar indefinidos círculos, tendrás que hacerlo con ciclos, como for.

Lo primero: ¿Trabajaste alguna vez con ArrayList, LinkedList, List o arrays? Si la respuesta es no, es lo primero, antes de mezclarlo con los gráficos.
Si ya has trabajado con alguno, entoncces la dinámica es: En el evento de click, almacenar un nuevo punto (x,y) en el array/lista. En paint(), recorrer la lista y dibujarlos todos.
Son 2 pasos bien diferenciados, obtener datos y utilizar esos datos. Empieza por ahí.

Acerca de almacenar los puntos, puedes crear una clase "Punto{ int x; inty; }".

Gracias por responder ivan, respondiendo a tus preguntas:
1: No, no he trabajado con ArrayList.
2: Ya he estado probando diferentes formas, pero no me queda, tambien lo he intentado con los vectores, que es muy parecido el funcionamiento del ArrayList (por lo que he investigado).

Sigo haciendo pruebas para que funcione,  realmente no estoy esperando que la respuesta me caiga del cielo, así que si conoces un tutorial o una pagina donde pueda entender esto (hablando de implementarlo en la forma que quiero, porque ya se que, para que funcione el ArrayList se debe de llamar a la clase en donde quiere almacenar los objetos)

Gracias por tu respuesta, seguiré buscando la manera de implementarlo en mi codigo.
En línea

PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: [Java] Utilizar un ArrayList en un JFrame
« Respuesta #3 en: 3 Diciembre 2017, 05:10 am »

Como te dijo ivancea96,
Cuando se haga click que se guarde las coordenadas en un ArrayList, por cada elemento del arrayList se guardara un array de int, el cual contendra como primero valor la X y luego la Y, o bien puedes optar por crear una clase, Coordenada y obtenerlo desde una instancia.

Luego en el método paint, recorreras todo el arrayList con las coordenadas que se fue registrando.

Prueba este código:

Código
  1. package Graficos;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.GraphicsEnvironment;
  7. import java.awt.event.MouseAdapter;
  8. import java.awt.event.MouseEvent;
  9. import java.awt.event.MouseListener;
  10. import java.awt.geom.Ellipse2D;
  11. import java.util.ArrayList;
  12. import java.util.Random;
  13. import javax.swing.JFrame;
  14. import javax.swing.JPanel;
  15.  
  16. public class Graficos2D {
  17.  
  18. public static void main(String[] args) {
  19.  
  20. Marco NewMarco = new Marco();
  21. NewMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22. }
  23. }
  24. class Marco extends JFrame {
  25.  
  26.    ArrayList<Integer[]> coordenadas;
  27.  
  28. int x;
  29.        int y;
  30.        int radio;
  31.  
  32. public Marco() {
  33.            this.coordenadas = new ArrayList<Integer[]>();
  34. setVisible(true);
  35. setSize(500,500);
  36. x = getSize().width/2;
  37.                y = getSize().height/2;
  38. setTitle("Dibujando Circulos");
  39.        addMouseListener(new MouseAdapter(){
  40.            @Override
  41.            public void mouseClicked(MouseEvent e) {
  42.                super.mouseMoved(e);
  43.                coordenadas.add(new Integer[]{x=e.getX(), y=e.getY()});
  44.                repaint();
  45.            }
  46.        });
  47. }
  48. @Override
  49. public void paint(Graphics g) {
  50. super.paint(g);
  51.                radio = 25;
  52. Random r = new Random();
  53. g2.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
  54.                for(int i = 0; i < coordenadas.size(); i++) {
  55.                    Ellipse2D circulo=new Ellipse2D.Float(coordenadas.get(i)[0]-radio, coordenadas.get(i)[1]-radio, radio*2, radio*2);
  56.                    g2.fill(circulo);
  57.                }
  58. }
  59.        class EventoMouse {
  60.            public EventoMouse(){
  61.            }
  62.        }
  63. }
  64.  

Si quieres que los colores de cada circulo quede como era originalmente, deberás crear una clase que guarde dichos valores para luego ser pintado con el color que le corresponde a cada circulo, eso ya te lo dejo para ti.

Muchas gracias por comunicarse con foro el hacker que tenga buen día señor.
En línea

Ahinoam

Desconectado Desconectado

Mensajes: 25


Fue divertido y estresante hacer el código


Ver Perfil
Re: [Java] Utilizar un ArrayList en un JFrame
« Respuesta #4 en: 4 Diciembre 2017, 20:46 pm »

Enserio agradezco tu ayuda PabloPbl y a ivancea96, por su ayuda, ahora ya entiendo como implementar el arraylist, ya que el arraylist no trabaja con datos abstractos. Pero yo cometí un gran error, después de muchas vueltas, me corrigieron en un foro en ingles, el error es que yo agregue el método super.paint y este me repintaba los círculos, borrando el anterior, así que solo lo elimine, y agregue un panel. Ahora ya se como hacer estos tipos de trabajos de dos formas.

El código final:
Código
  1. package examenfinal;
  2. import java.awt.AlphaComposite;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.event.MouseAdapter;
  7. import java.awt.event.MouseEvent;
  8. import java.awt.geom.Ellipse2D;
  9. import java.util.Random;
  10. import javax.swing.JFrame;
  11. import javax.swing.JPanel;
  12. public class MetodoNo1 {
  13.    public static void main(String[] args){
  14.        Marco NewMarco = new Marco();
  15.        JPanel panel=new JPanel();
  16.        NewMarco.setContentPane(panel);
  17.    }
  18. }
  19. class Marco extends JFrame {
  20.        int x;
  21.        int y;
  22.        int radio;
  23. public Marco() {
  24. setVisible(true);
  25. setSize(500,500);
  26.                x = getSize().width/2;
  27.                y = getSize().height/2;
  28. setTitle("Dibujando Circulos");
  29.                addMouseListener(new MouseAdapter(){
  30.                    @Override
  31.                    public void mouseClicked(MouseEvent e) {
  32.                        super.mouseMoved(e);
  33.                        x=e.getX();
  34.                        y=e.getY();
  35.                        repaint();
  36.                    }
  37.                });
  38. }
  39.        @Override
  40. public void paint(Graphics g) {
  41.                radio = 25;
  42. Random r = new Random();
  43. g2.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
  44.                AlphaComposite AlpComp=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
  45.                g2.setComposite(AlpComp);
  46. Ellipse2D circulo=new Ellipse2D.Float(x-radio, y-radio, radio*2, radio*2);
  47. g2.fill(circulo);
  48. }
  49.        class EventoMouse {
  50.            public EventoMouse(){
  51.            }
  52.        }
  53. }
  54.  
Doy por resuelto el tema, gracias por la ayuda.
Fue divertido y estresante hacer el codigo
« Última modificación: 4 Diciembre 2017, 20:58 pm por Ahinoam » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
java ArrayList en C++
Programación C/C++
<<<-Basura->>> 5 8,478 Último mensaje 4 Abril 2013, 21:48 pm
por naderST
jframe con graficos [resuelto]
Java
aquiles12 3 2,374 Último mensaje 5 Mayo 2014, 08:37 am
por Debci
Java ArrayList « 1 2 »
Java
josephb401 12 5,698 Último mensaje 23 Noviembre 2015, 17:57 pm
por josephb401
Cómo ejecutar un metodo de un arraylist en otro jFrame
Java
Finishim 1 3,429 Último mensaje 27 Noviembre 2015, 02:17 am
por PabloPbl
Llamar ArrayList a otro Jframe
Java
Arkzas 4 6,493 Último mensaje 23 Junio 2017, 03:26 am
por Arkzas
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines