[Java] Utilizar un ArrayList en un JFrame

/*
 *  -----------------------------------
 *  java mexico
 *  -----------------------------------
 *  Descripcion :
 *  Hola, estoy realizando un pequeño programa, el cual consiste en que, al hacer clic en un panel se dibuje un circulo,
 *  y cuando se vuelva hacer clic, se dibuje otro círculos de otro color, pero sin que se borre el primer circulo,
 *  y así hasta tapizar el panel de círculos de diferentes colores.
 *  Mi pregunta es, ¿como almacenar los círculos en la memoria, para que no se borren?, ya tengo el evento del clic y que
 *  los círculos cambien de color,
 *  he estado investigando como hacer esto, tengo entendido que se puede hacer con un ArrayList o con un Vector.
 *  -----------------------------------
 *  Actualizacion: 2017_12_06
 *  -----------------------------------
 *  Descripcion :
 *  Para el siguiente ejercicio utilizo Vectores. de poscion dinamica...
 *  el vector va aumentando en tamaño o posiciones cada vez que hago clic en el JFrame. v.add()
 *  -----------------------------------
 *  1. import java.util.Vector;                  importar clase
 *  2. Vector<String> v = new Vector<String>();  declarar vector tipo String
 *  3. ipos = 0;                                 declarar variable contadora
 *  4. grabarposicion();                         agregar posicion inicial. al abrir JFrame
 *  5. grabarposicion();                         agregar posicion al hacer click en JFrame
 *  ------------- implemento estos dos metodos que puedes utilizar
 *  6. consultarelemento(int idx)                consultar elemento del vector
 *  7. eliminarelemento(int idx)                 eliminar  elemento del vector
 *  -----------------------------------
 *  puedes hacer referencia a las clases del vector escribiendo  v.  luego, de despliega la ventana...
 *  -----------------------------------
 * si deseo saber el tamaño del vector. puede acceder a la variable ipos
 */

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;
//1.
import java.util.Vector;

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;
   
    //2.
    Vector<String> v = new Vector<String>();
   
    //3.
    int ipos = 0;
   
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);
    //4. ó 5.
    grabarposicion();
}

class EventoMouse {
    public EventoMouse(){
    }
}

public void grabarposicion(){
   
    //definir posicion x  y
    int resx     =  x-radio;
    int resy     =  y-radio;
    String posxy = ""+resx+","+resy+"";    //  (,) separador

    //agregar posicion al vector    
    v.add(posxy);
   
    //imprimir en consola posicion
    System.out.println("Npos : "+ipos+" -- Nueva Posicion : (x,y) : "+posxy+")");
   
    //incrementar a 1
    ipos++;
   
}

//6.
public String consultarelemento(int idx){
    //inicalizaar variable respuesta
    String res = null;
   
    try{
        //obtener elemento en la posicion
        res= v.get(idx);    
    }
    catch(Exception ex){
        //posiicon del elemento a consultar no existe
        System.out.println("Error : "+ex);
    }
    //retorno
    return res;
}

//7.
public boolean eliminarelemento(int idx){
    //inicalizaar variable respuesta
    boolean res = true;
    try{
        //eliminar elemento en la posicion
        v.remove(idx);    
    }
    catch(Exception ex){
        //posiicon del elemento a eliminar no existe
        System.out.println("Error : "+ex);
        res=false;
    }
    //retorno
    return res;
}

}
//**** fin clase

AdjuntoTamaño
Graficos2d.zip69.46 KB

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

[Java] Utilizar un ArrayList en un JFrame

Para el siguiente ejercicio utilizo Vectores. de posición dinámica