ArrayList en Java, con ejemplos


La clase ArrayList en Java, es una clase que permite almacenar datos en memoria de forma similar a los Arrays, con la ventaja de que el numero de elementos que almacena, lo hace de forma dinámica, es decir, que no es necesario declarar su tamaño como pasa con los Arrays. Para todos aquellos que hayáis estudiado en alguna asignatura las estructuras de datos de las Pilas, Colas, Listas, Arboles (AVL, B, B+, B*) etc. hay decir que los ArrayList "tiran por tierra" toda la teoria que hay detrás de esas estructuras de datos ya que los ArrayList nos permiten añadir, eliminar y modificar elementos (que pueden ser objetos o elementos atómicos) de forma trasparente para el programador. Antes de pasar a explicar el manejo de los ArrayList, dejamos un enlace al JavaDoc, pulsando AQUI.

Antes de todo, decir que el código de todos los ejemplos que se ponen a continuación los podeis descargar pulsando AQUI.

Los principales métodos para trabajar con los ArrayList son los siguientes:

// Declaración de un ArrayList de "String". Puede ser de cualquier otro Elemento u Objeto (float, Boolean, Object, ...)
ArrayList<String> nombreArrayList = new ArrayList<String>();
// Añade el elemento al ArrayList
nombreArrayList.add("Elemento");
// Añade el elemento al ArrayList en la posición 'n'
nombreArrayList.add(n, "Elemento 2");
// Devuelve el numero de elementos del ArrayList
nombreArrayList.size();
// Devuelve el elemento que esta en la posición '2' del ArrayList
nombreArrayList.get(2);
// Comprueba se existe del elemento ('Elemento') que se le pasa como parametro
nombreArrayList.contains("Elemento");
// Devuelve la posición de la primera ocurrencia ('Elemento') en el ArrayList  
nombreArrayList.indexOf("Elemento");
// Devuelve la posición de la última ocurrencia ('Elemento') en el ArrayList   
nombreArrayList.lastIndexOf("Elemento");
// Borra el elemento de la posición '5' del ArrayList   
nombreArrayList.remove(5); 
// Borra la primera ocurrencia del 'Elemento' que se le pasa como parametro.  
nombreArrayList.remove("Elemento");
//Borra todos los elementos de ArrayList   
nombreArrayList.clear();
// Devuelve True si el ArrayList esta vacio. Sino Devuelve False   
nombreArrayList.isEmpty();  
// Copiar un ArrayList 
ArrayList arrayListCopia = (ArrayList) nombreArrayList.clone();  
// Pasa el ArrayList a un Array 
Object[] array = nombreArrayList.toArray();   

Otra cosa muy importante a la hora de trabajar con los ArrayList son los "Iteradores" (Iterator). Los Iteradores sirven para recorrer los ArrayList y poder trabajar con ellos. Los Iteradores solo tienen tres métodos que son el "hasNext()" para comprobar que siguen quedando elementos en el iterador, el "next()"  para que nos de el siguiente elemento del iterador; y el "remove()" que sirve para eliminar el elemento del Iterador.

Bueno, si esto no te ha quedado muy claro, pasamos a poner el primer ejemplo. En el siguiente fragmento de código, declaramos un ArrayList de Strings y lo rellenamos con 10 Strings (Elemento i). Esto lo hacemos con el método "add()". Después añadimos un nuevo elemento al ArrayList en la posición '2' (con el metodo "add(posición,elemento)") que le llamaremos "Elemento 3" y posteriormente imprimiremos el contenido del ArrayList, recorriendolo con un Iterador. El fragmento de este código es el siguiente:

// Declaración el ArrayList
ArrayList<String> nombreArrayList = new ArrayList<String>();

// Añadimos 10 Elementos en el ArrayList
for (int i=1; i<=10; i++){
	nombreArrayList.add("Elemento "+i); 
}

// Añadimos un nuevo elemento al ArrayList en la posición 2
nombreArrayList.add(2, "Elemento 3");

// Declaramos el Iterador e imprimimos los Elementos del ArrayList
Iterator<String> nombreIterator = nombreArrayList.iterator();
while(nombreIterator.hasNext()){
	String elemento = nombreIterator.next();
	System.out.print(elemento+" / ");
}

Ejecutando esta código obtenemos por pantalla lo siguiente:

Elemento 1 / Elemento 2 / Elemento 3 / Elemento 3 / Elemento 4 / Elemento 5 / Elemento 6 / Elemento 7 / Elemento 8 / Elemento 9 / Elemento 10 /

Como se observa en el resultado tenemos repetido el elemento "Elemento 3" dos veces y esto lo hemos puesto a proposito para mostrar el siguiente ejemplo. Ahora para seguir trabajando con los ArrayList, lo que vamos ha hacer es mostrar el numero de elementos que tiene el ArrayList y después eliminaremos el primer elemento del ArrayList y los elementos del ArrayList que sean iguales a "Elemento 3", que por eso lo hemos puesto repetido. El "Elemento 3" lo eliminaremos con el metodo "remove()" del iterador. A continuación mostramos el código que realiza lo descrito:

// Recordar que previamente ya hemos declarado el ArrayList y el Iterator de la siguiente forma:
// ArrayList<String> nombreArrayList = new ArrayList<String>();
// Iterator<String> nombreIterator = nombreArrayList.iterator();

// Obtenemos el numero de elementos del ArrayList
int numElementos = nombreArrayList.size();
System.out.println("nnEl ArrayList tiene "+numElementos+" elementos");

// Eliminamos el primer elemento del ArrayList, es decir el que ocupa la posición '0'
System.out.println("n... Eliminamos el primer elemento del ArrayList ("+nombreArrayList.get(0)+")...");
nombreArrayList.remove(0);

// Eliminamos los elementos de ArrayList que sean iguales a "Elemento 3"
System.out.println("n... Eliminamos los elementos de ArrayList que sean iguales a "Elemento 3" ...");
nombreIterator = nombreArrayList.iterator();
while(nombreIterator.hasNext()){
	String elemento = nombreIterator.next();
	if(elemento.equals("Elemento 3"))
		nombreIterator.remove();	// Eliminamos el Elemento que hemos obtenido del Iterator
}

// Imprimimos el ArrayList despues de eliminar los elementos iguales a "Elemento 3"
System.out.println("nImprimimos los elementos del ArrayList tras realizar las eliminaciones: ");
nombreIterator = nombreArrayList.iterator();
while(nombreIterator.hasNext()){
	String elemento = nombreIterator.next();
	System.out.print(elemento+" / ");
}

// Mostramos el numero de elementos que tiene el ArrayList tras las eliminaciones:
numElementos = nombreArrayList.size();
System.out.println("nNumero de elementos del ArrayList tras las eliminaciones = "+numElementos);

Como salida a este código tenemos lo siguiente:

El ArrayList tiene 11 elementos

... Eliminamos el primer elemento del ArrayList (Elemento 1)...

... Eliminamos los elementos de ArrayList que sean iguales a "Elemento 3" ...

Imprimimos los elementos del ArrayList tras realizar las eliminaciones: 
Elemento 2 / Elemento 4 / Elemento 5 / Elemento 6 / Elemento 7 / Elemento 8 / Elemento 9 / Elemento 10 / 

Numero de elementos del ArrayList tras las eliminaciones = 8

Si os fijais, hemos eliminado 3 elementos del ArrayList de dos formas distintas, preguntando por la posición que ocupa un elemento en el ArrayList y preguntando por el contenido de algún elemento del ArrayList. Como se observa es muy importante saber manejar los Iteradores ya que con ellos podemos tratar los elementos del ArrayList.

Bueno todo lo que hemos visto esta muy bien, pero por lo general los ArrayList se suelen utilizar con objetos más que con estructuras atómicas de datos, ya que los ArrayList en Java son estructuras muy potentes y sencillas de manejar.

Ahora vamos a poner un ejemplo de la utilización de ArrayList con Objetos. Para ello nos vamos ha crear una clase llamada "PartidoFutbol" que utilizaremos para crearnos objetos de esa clase que almacenaremos en el ArrayList. En primer lugar mostramos la clase "PartidoFutbol" que es la siguiente:

package ArrayList_Objetos;

public class PartidoFutbol {

	private String equipoLocal;
	private String equipoVisitante;
	private int golesLocal;
	private int golesVisitante;

	public String getEquipoLocal() {
		return equipoLocal;
	}

	public void setEquipoLocal(String equipoLocal) {
		this.equipoLocal = equipoLocal;
	}

	public String getEquipoVisitante() {
		return equipoVisitante;
	}

	public void setEquipoVisitante(String equipoVisitante) {
		this.equipoVisitante = equipoVisitante;
	}

	public int getGolesLocal() {
		return golesLocal;
	}

	public void setGolesLocal(int golesLocal) {
		this.golesLocal = golesLocal;
	}

	public int getGolesVisitante() {
		return golesVisitante;
	}

	public void setGolesVisitante(int golesVisitante) {
		this.golesVisitante = golesVisitante;
	}
}

Lo que vamos ha hacer ahora en este ejemplo, es leer desde un fichero de texto, una serie de partidos de fútbol que guardaremos en un ArrayList de objetos "PartidoFutbol". Al utilizar el ArrayList, nos da igual el numero de partidos de fútbol que haya en el fichero de texto ya que los ArrayList como vimos al principio son dinámicos. Para este caso os adelante que hay 50 partidos de fútbol en el fichero, pero nos daria igual cuantos podría haber.

A continuación se muestra el código de la lectura de los partidos de fútbol y como los almacenamos en un ArrayList. Por curiosidad, un partido de fútbol esta guardado en el fichero con la siguiente estructura: equipoLocal::equipoVisitante::golesLocal::golesVisitante

// Nos creamos un ArrayList de objetos de la Clase "PartidoFutbol"
System.out.println("... Nos creamos un ArrayList de objetos de la Clase "PartidoFutbol" ...");
ArrayList<PartidoFutbol> partidos = new ArrayList<PartidoFutbol>();

// Instanciamos el fichero donde estan los datos
File fichero = new File(nombreFichero);
Scanner s = null;

try {
	// Leemos el contenido del fichero
	System.out.println("... Leemos el contenido del fichero ...");
	s = new Scanner(fichero);
	// Obtengo los datos de los partidos de fútbol del fichero
	while (s.hasNextLine()){
		String linea = s.nextLine();	// Obtengo una linea del fichero (un partido de fútbol)
		String [] cortarString = linea.split("::");		// Obtengo los datos del partido de futbol
		PartidoFutbol partido = new PartidoFutbol();	// Creo un objeto de la clase "PartidoFutbol"

		// Pongo los atributos al objeto "partido"
		partido.setEquipoLocal(cortarString[0]);
		partido.setEquipoVisitante(cortarString[1]);
		partido.setGolesLocal(Integer.parseInt(cortarString[2]));
		partido.setGolesVisitante(Integer.parseInt(cortarString[3]));

		// Añadimos el objeto "partido" al ArrayList
		partidos.add(partido);
	}

} catch (Exception e) {
	e.printStackTrace();
} finally{
	try {
		if (s != null)
			s.close();
	} catch (Exception e2) {
		e2.printStackTrace();
	}
}

System.out.println("... Guardados "+partidos.size()+" partidos de fútbol  ...");

Con este código que mostramos tambien se puede ver de que forma se puede leer un fichero de texto y tratar los datos 😉 . Una vez ejecutado este código tenemos guardado en el ArrayList "partidos", 50 partidos de fútbol. Ahora recorremos el ArrayList con un Iterator y mostramos por pantalla todos los resultados de fútbol. Esto lo hacemos igual que antes, con el Iterator:

System.out.println("n... Resultados de los partidos de Futbol ...");
Iterator<PartidoFutbol> itrPartidos = partidos.iterator();
while(itrPartidos.hasNext()){
	PartidoFutbol partido = itrPartidos.next();
	System.out.println(partido.getEquipoLocal() + " "
			+ partido.getGolesLocal() + "-"
			+ partido.getGolesVisitante() + " "
			+ partido.getEquipoVisitante());
}

Como salida a la ejecución de este código tenemos lo siguiente:

... Resultados de los partidos de Futbol ...
Valencia 1-0 Betis
Betis 1-0 Osasuna
Atletico Madrid 0-0 Zaragoza
Zaragoza 2-2 Valencia
Mallorca 0-1 Deportivo
Deportivo 1-0 Atletico Madrid
.
.
.
Mallorca 1-4 Malaga
Malaga 0-2 Atletico Madrid

Ahora vamos a eliminar del ArrayList, todos los partidos que no tengan como resultado un empate. De esta forma trabajaremos de nuevo con el iterator. Esto lo hacemos de la siguiente forma:

// Eliminamos los partidos de futbol del ArrayList, cuyo resultado
// no sea un empate
System.out.println("n... Tamaño del ArrayList antes de eliminar partidos de futbol = "+partidos.size()+" ...");
System.out.println("n... Eliminamos los partidos de futbol cuyo resultado no sea un empate ...");
itrPartidos = partidos.iterator();
while(itrPartidos.hasNext()){
	PartidoFutbol partido = itrPartidos.next();
	// Si los goles no son iguale, eliminamos el partido
	if(partido.getGolesLocal() != partido.getGolesVisitante())
		itrPartidos.remove();
}

// Imprimimos los elementos del ArrayList
System.out.println("n... Tamaño del ArrayList despues de eliminar partidos de futbol = "+partidos.size()+" ...");
System.out.println("n... Resultados de los partidos de Futbol con empate ...");
itrPartidos = partidos.iterator();
while(itrPartidos.hasNext()){
	PartidoFutbol partido = itrPartidos.next();
	System.out.println(partido.getEquipoLocal() + " "
			+ partido.getGolesLocal() + "-"
			+ partido.getGolesVisitante() + " "
			+ partido.getEquipoVisitante());
}

Como resultado al ejecutar este código tenemos lo siguiente, que como se observa el ArrayList solo se ha quedado con los partidos de fútbol en los que ha habido un empate:

... Tamaño del ArrayList antes de eliminar partidos de futbol = 50 ...

... Eliminamos los partidos de futbol cuyo resultado no sea un empate ...

... Tamaño del ArrayList despues de eliminar partidos de futbol = 16 ...

... Resultados de los partidos de Futbol con empate ...
Atletico Madrid 0-0 Zaragoza
Zaragoza 2-2 Valencia
Alaves 0-0 Barcelona
Getafe 1-1 Athletic
Villarreal 1-1 Sevilla
Betis 0-0 Zaragoza
Valencia 2-2 Deportivo
Deportivo 1-1 Betis
Barcelona 2-2 Valencia
Getafe 1-1 Mallorca
Malaga 0-0 Alaves
Cadiz 1-1 Villarreal
Sevilla 0-0 Cadiz
Zaragoza 1-1 Deportivo
Barcelona 2-2 Zaragoza
Real Sociedad 1-1 Betis

Con esto ya hemos visto como manejar los ArrayList y hemos visto los métodos mas importantes para ello. Con todo esto ya esta casi todo contado sobre los ArrayList en Java. Ahora solo queda coger soltura y trabajar con ello.

Por último vamos a rizar el rizo y vamos a poner un ejemplo de como trabajar con ArrayList de ArrayList. Para ello vamos ha hacer un ejemplo que en principio puede parecer complejo pero que en realizar no lo es, solo es un poco lioso y hay que ir con cuidado. INTENTA HACER POR TU CUENTA ESTE EJERCICIO ANTES DE MIRARLO, PORQUE SI LO CONSIGUES HACER, NO HABRA TRABAJO CON ARRAYLIST QUE SE TE RESISTA 😉

El ejercicio es el siguiente. Dado un fichero con una serie de números, hay que eliminar todos los ceros que hay en el fichero, y si una linea esta llena de ceros, hay que eliminar la linea. En este caso tenemos en el fichero el contenido siguiente:

1 2 0 3 0 7 
0 0 0 0 
0 6 9 8 0 9 6 
0 0 0 0 7 9 0 0 
0 0 0 0 0 
8 7 0 8 9 0 8

Y lo que hay que conseguir es trasformar esos datos en los siguientes:

1 2 3 7 
6 9 8 9 6 
7 9 
8 7 8 9 8

Es decir se eliminan todos los ceros y como las filas 2 y 5 contienen todo ceros, se han de eliminar esas filas. Para ello nos tenemos que declarar un ArrayList de ArrayList de enteros de la siguiente forma:

ArrayList<ArrayList<Integer>> arrayListNumeros = new ArrayList<ArrayList<Integer>>();

Lo siguiente que haremos sera leer los números del fichero y nos crearemos por cada fila un ArrayList de enteros en el que guardaremos cada número en una posición del ArrayList y luego guardaremos ese ArrayList en el ArrayList que hemos llamado "arrayListNumeros". Esto lo hacemos de la siguiente forma:

// Instanciamos el fichero donde estan los datos
File fichero = new File(nombreFichero);
Scanner s = null;

try {
	// Leemos el contenido del fichero
	System.out.println("... Leemos el contenido del fichero ...");
	s = new Scanner(fichero);
	// Obtengo los datos de los partidos de fútbol del fichero
	while (s.hasNextLine()){
		String linea = s.nextLine();	// Obtengo una linea del fichero con los numeros
		String [] cortarString = linea.split(" ");		// Obtengo los numeros de la linea en un array
		ArrayList<Integer> numeros = new ArrayList<Integer>();
		// Pongo los numeros de la fila en el ArrayList
		for (int i=0; i<cortarString.length; i++){
			numeros.add(Integer.parseInt(cortarString[i]));
		}
		// Añado el ArrayList de enteros al ArratList de ArrayList
		arrayListNumeros.add(numeros);	
	}

} catch (Exception e) {
	e.printStackTrace();
} finally{
	try {
		if (s != null)
			s.close();
	} catch (Exception e2) {
		e2.printStackTrace();
	}
}

Para comprobar que hemos copiado bien los datos y para recorrer el ArrayList de ArrayList de Enteros, vamos a imprimir por pantalla el contenido del ArrayList y lo hacemos de la siguiente forma:

// Para ver que hemos leido bien los numeros del fichero, recorremos el ArrayList de
// ArrayList y lo mostramos por pantalla.
System.out.println("n... Contenido de los ArrayList del ArrayList ...");
Iterator<ArrayList<Integer>> itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
	ArrayList<Integer> numeros = itrArrayListNumeros.next();
	Iterator<Integer> itrNumeros = numeros.iterator();
	while(itrNumeros.hasNext()){
		int numero = itrNumeros.next();
		System.out.print(numero+" ");
	}
	System.out.println();
}

Como salida tenemos el contenido del fichero.
Ahora lo que vamos ha hacer es recorrer el ArrayList de ArrayList de Enteros, y eliminaremos de los ArrayList, todos los elementos que tengan como contenido '0'. Esto lo hacemos de la siguiente forma:

// Recorremos los ArrayList que hay en el ArrayList y eliminamos los numeros que son cero
itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
	ArrayList<Integer> numeros = itrArrayListNumeros.next();
	Iterator<Integer> itrNumeros = numeros.iterator();
	while(itrNumeros.hasNext()){
		int numero = itrNumeros.next();
		if (numero == 0)
			itrNumeros.remove();
	}
}

Ahora borramos del ArrayList, los ArrayLit que están vacíos, preguntando con el método "isEmpty()". Esto lo hacemos de la siguiente forma:

// Recorremos el ArrayList de los ArrayList y eliminamos los ArrayList que no
// contengan elementos
itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
	ArrayList<Integer> numeros = itrArrayListNumeros.next();
	// Si el ArrayList esta vacio, lo eliminamos del ArrayList
	if (numeros.isEmpty())
		itrArrayListNumeros.remove();
}

Con todo esto ya hemos eliminado los ceros, y los ArrayList que estaban vacíos. Ahora solo queda recorrer de nuevo el ArrayList de ArrayList y mostrar el contenido tras realizar las eliminaciones de ceros. Esto lo hacemos de la siguiente manera:

// Mostramos el ArrayList tras eliminar todos los ceros
String salida = "";
System.out.println("n... Salida sin ceros ...");
itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
	ArrayList<Integer> numeros = itrArrayListNumeros.next();
	Iterator<Integer> itrNumeros = numeros.iterator();
	while(itrNumeros.hasNext()){
		int numero = itrNumeros.next();
		salida += numero+" ";
	}
	salida += "n";
}

System.out.println(salida);

Tras ejecutar este código, vemos que tenemos la salida esperada, que es la siguiente:

1 2 3 7 
6 9 8 9 6 
7 9 
8 7 8 9 8

Con todo esto ya hemos visto prácticamente todo sobre los ArrayList, con ejemplo de como tratarlos con elementos atómicos (String, int, float, double, …) y con objetos y sobre todo ver como se trabaja con ArrayList de ArrayList que como se ha visto la complejidad esta en saber recorrer esa estructura de datos.

El código de todos estos ejemplos (junto con los ficheros correspondientes) los podeis descargar desde AQUI.

Cualquier duda, no dudéis en preguntarla dejando un comentario.

Comparte esta entrada en:
Safe Creative #1401310112503
ArrayList en Java, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

175 thoughts on “ArrayList en Java, con ejemplos”

  1. este es el del boton

    // TODO add your handling code here:
    //——- Implementar la lógica correspondiente ———–
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    try
    {
    int cantFacturas = obj_BD.obtenerCantFacturasGeneradas();
    String cadena = String.valueOf(cantFacturas);
    jTextField_cantFacturas.setText(cadena);

    }
    catch(SQLException err)
    {
    System.out.println(err.getMessage());
    }
    //———————————————————————————–

  2. [3/5 10:22 p. m.] Perez: *CODIGO DE LOS BOTONES*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */
    package GUI;

    import Logica_Operaciones_BD.OperacionesCRUD;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Vector;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;

    /**
    *
    * @author harol
    */
    public class VentanaPrincipalJFrame extends javax.swing.JFrame {

    /**
    * Creates new form VentanaPrincipalJFrame
    */
    public VentanaPrincipalJFrame() {
    initComponents();
    }

    /**
    * This method is called from within the constructor to initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is always
    * regenerated by the Form Editor.
    */
    @SuppressWarnings(«unchecked»)
    //
    private void initComponents() {

    jPanel2 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    jTextField_cantFacturas = new javax.swing.JTextField();
    jButton_mostrarCantFacturas = new javax.swing.JButton();
    jPanel3 = new javax.swing.JPanel();
    jScrollPane1 = new javax.swing.JScrollPane();
    jTable_ListadoNombresProductosStock = new javax.swing.JTable();
    jButton_mostrarListadoProductosStock = new javax.swing.JButton();
    jPanel4 = new javax.swing.JPanel();
    jScrollPane3 = new javax.swing.JScrollPane();
    jTable_detallesProductosFactura = new javax.swing.JTable();
    jLabel3 = new javax.swing.JLabel();
    jComboBox_listadoCodigosFacturas = new javax.swing.JComboBox();
    jButton_mostrarDetallesFactura = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    addComponentListener(new java.awt.event.ComponentAdapter() {
    public void componentShown(java.awt.event.ComponentEvent evt) {
    formComponentShown(evt);
    }
    });

    jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

    jLabel1.setText(«Total de facturas generadas:»);

    jTextField_cantFacturas.setEditable(false);

    jButton_mostrarCantFacturas.setText(«Mostrar»);
    jButton_mostrarCantFacturas.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton_mostrarCantFacturasActionPerformed(evt);
    }
    });

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
    jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel2Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(jLabel1)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    .addComponent(jTextField_cantFacturas, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jButton_mostrarCantFacturas)
    .addContainerGap())
    );
    jPanel2Layout.setVerticalGroup(
    jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel2Layout.createSequentialGroup()
    .addContainerGap()
    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(jLabel1)
    .addComponent(jTextField_cantFacturas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jButton_mostrarCantFacturas))
    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

    jTable_ListadoNombresProductosStock.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    {null},
    {null},
    {null},
    {null}
    },
    new String [] {
    «Descripcion Productos en Stock»
    }
    ) {
    boolean[] canEdit = new boolean [] {
    false
    };

    public boolean isCellEditable(int rowIndex, int columnIndex) {
    return canEdit [columnIndex];
    }
    });
    jScrollPane1.setViewportView(jTable_ListadoNombresProductosStock);

    jButton_mostrarListadoProductosStock.setText(«Mostrar»);
    jButton_mostrarListadoProductosStock.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton_mostrarListadoProductosStockActionPerformed(evt);
    }
    });

    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
    jPanel3.setLayout(jPanel3Layout);
    jPanel3Layout.setHorizontalGroup(
    jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel3Layout.createSequentialGroup()
    .addGap(238, 238, 238)
    .addComponent(jButton_mostrarListadoProductosStock)
    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    .addGroup(jPanel3Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
    .addContainerGap())
    );
    jPanel3Layout.setVerticalGroup(
    jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel3Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 141, Short.MAX_VALUE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    .addComponent(jButton_mostrarListadoProductosStock)
    .addContainerGap())
    );

    jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());

    jTable_detallesProductosFactura.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    {null, null, null},
    {null, null, null},
    {null, null, null},
    {null, null, null}
    },
    new String [] {
    «Descripcion Producto», «Cantidad Solicitada», «Precio Total del Producto»
    }
    ) {
    boolean[] canEdit = new boolean [] {
    false, false, false
    };

    public boolean isCellEditable(int rowIndex, int columnIndex) {
    return canEdit [columnIndex];
    }
    });
    jScrollPane3.setViewportView(jTable_detallesProductosFactura);

    jLabel3.setText(«Seleccione código de la factura:»);

    jComboBox_listadoCodigosFacturas.setToolTipText(«»);

    jButton_mostrarDetallesFactura.setText(«Mostrar»);
    jButton_mostrarDetallesFactura.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton_mostrarDetallesFacturaActionPerformed(evt);
    }
    });

    javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
    jPanel4.setLayout(jPanel4Layout);
    jPanel4Layout.setHorizontalGroup(
    jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel4Layout.createSequentialGroup()
    .addContainerGap()
    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(jScrollPane3)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
    .addGap(0, 0, Short.MAX_VALUE)
    .addComponent(jLabel3)
    .addGap(18, 18, 18)
    .addComponent(jComboBox_listadoCodigosFacturas, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(18, 18, 18)
    .addComponent(jButton_mostrarDetallesFactura)))
    .addContainerGap())
    );
    jPanel4Layout.setVerticalGroup(
    jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel4Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(jLabel3)
    .addComponent(jComboBox_listadoCodigosFacturas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jButton_mostrarDetallesFactura))
    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addContainerGap()
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(18, 18, 18)
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    .addGap(18, 18, 18)
    .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    pack();
    }//

    private void jButton_mostrarCantFacturasActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //——- Implementar la lógica correspondiente ———–
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    try
    {
    int cantFacturas = obj_BD.obtenerCantFacturasGeneradas();
    String cadena = String.valueOf(cantFacturas);
    jTextField_cantFacturas.setText(cadena);

    }
    catch(SQLException err)
    {
    System.out.println(err.getMessage());
    }
    //———————————————————————————–
    }
    //OK
    private void jButton_mostrarListadoProductosStockActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //——- Implementar la lógica correspondiente ————————–
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    try
    {
    //2. Obtener el vector lista con los códigos de facturas del método que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    Vector lista_prod = obj_BD.obtenerListadoNombresProductosStock();
    //3. Crear el objeto DefaultTableModel del jTable_ListadoNombresProductosStock que debe mostrar el vector lista de códigos de facturas
    DefaultTableModel modeloTabla = (DefaultTableModel)jTable_ListadoNombresProductosStock.getModel();
    //4. Setear el componente jTable_ListadoNombresProductosStock, desde el objeto DefaultTableModel, con cero filas y cero columnas de datos a mostrar.
    modeloTabla.setColumnCount(0);
    modeloTabla.setRowCount(0);
    //5. Agregar, desde el objeto DefaultTableModel, la columna de datos con cabecera «Descripcion Productos en Stock» y vector lista de datos con los códgios de las facturas generadas.
    modeloTabla.addColumn(«Descripcion productos Stock»,lista_prod);
    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }

    //—————————————————————————————————————————————-
    }

    private void formComponentShown(java.awt.event.ComponentEvent evt) {
    // TODO add your handling code here:
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    DefaultComboBoxModel recordList_Carr_Est = (DefaultComboBoxModel)jComboBox_listadoCodigosFacturas.getModel();
    recordList_Carr_Est.removeAllElements();
    try
    {
    Vector listado_codigosFacturas = obj_BD.obtenerCogidosFacturas();
    int cant_carreras = listado_codigosFacturas.size();
    for (int fila = 0; fila < cant_carreras; fila++)
    {
    String nombre_carrera = listado_codigosFacturas.get(fila);
    recordList_Carr_Est.addElement(nombre_carrera);
    }
    recordList_Carr_Est.setSelectedItem(listado_codigosFacturas.get(0));
    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }
    }

    private void jButton_mostrarDetallesFacturaActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //——- Implementar la lógica correspondiente —————————
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    //2. Obtener la lista de valores del modelo del jComboBox_listadoCodigosFacturas con los datos de códigos de las facturas generadas.
    DefaultComboBoxModel modeloComboBox = (DefaultComboBoxModel)jComboBox_listadoCodigosFacturas.getModel();
    //3. Obtener el código de factura seleccionado desde el combobox jComboBox_listadoCodigosFacturas
    String codigo_selected = String.valueOf(modeloComboBox.getSelectedItem());
    try
    {
    //4. Obtener la matriz de datos del detalle de productos de la factura que devuelve el método que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    ArrayList<Vector> matriz_detalle = obj_BD.obtenerDetallesProductosXFactura(codigo_selected);
    //5. Crear el objeto DefaultTableModel del jTable_detallesProductosFactura que debe mostrar la matriz de datos del detalle de la factura seleccionada para filtrar.
    DefaultTableModel modeloTable = (DefaultTableModel)jTable_detallesProductosFactura.getModel();
    //6. Setear, desde el objeto DefaultTableModel, el componente jTable_detallesProductosFactura con cero filas a mostrar.
    modeloTable.setRowCount(0);
    //7. Recorrer cada fila de la matriz de datos con el detalle de productos de la factura y para cada iteración resolver:
    for(Vector datos : matriz_detalle){
    //7.1 En cada iteración, agregar al jTable_detallesProductosFactura, desde el objeto DefaultTableModel, los datos de cada una de las filas que están almacenadas en la matriz de datos.
    modeloTable.addRow(datos);
    }

    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }

    //—————————————————————————————————————————————-
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
    */
    try {
    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if («Nimbus».equals(info.getName())) {
    javax.swing.UIManager.setLookAndFeel(info.getClassName());
    break;
    }
    }
    } catch (ClassNotFoundException ex) {
    java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
    java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
    java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new VentanaPrincipalJFrame().setVisible(true);
    }
    });
    }

    // Variables declaration – do not modify
    private javax.swing.JButton jButton_mostrarCantFacturas;
    private javax.swing.JButton jButton_mostrarDetallesFactura;
    private javax.swing.JButton jButton_mostrarListadoProductosStock;
    private javax.swing.JComboBox jComboBox_listadoCodigosFacturas;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTable jTable_ListadoNombresProductosStock;
    private javax.swing.JTable jTable_detallesProductosFactura;
    private javax.swing.JTextField jTextField_cantFacturas;
    // End of variables declaration
    }
    [3/5 10:24 p. m.] Perez: *CODIGO DE OPERACIONES CRUD*
    /*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */
    package Logica_Operaciones_BD;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Vector;

    /**
    *
    * @author harol
    */
    public final class OperacionesCRUD
    {
    private static OperacionesCRUD lainstance = new OperacionesCRUD();
    private Connection conexion;

    private OperacionesCRUD()
    {
    }

    public static OperacionesCRUD getInstance()
    {
    return lainstance;
    }

    private void iniciarConexionBD()
    {
    this.conexion = ConexionBD.iniciarConexion();
    }

    private void cerrarConexionBD() throws SQLException
    {
    if (this.conexion != null && this.conexion.isClosed() == false) //valida si aun está habierta la conexion BD
    {
    this.conexion.close();
    }
    }
    //Inciso a
    public int obtenerCantFacturasGeneradas() throws SQLException
    {
    //1. Conectar a la base de datos
    this.iniciarConexionBD();
    //2. Variable para almacenar el total de facturas almacenadas en la base de datos.
    int cantFacturas = 0;
    //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE ————————————————————————
    //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
    Statement stm = this.conexion.createStatement();
    //4. Definir el texto String de la consulta SQL.
    String sql = «select count(*) as cant_facturas from facturas f»;
    //5. Ejecutar la consulta y amacenar en el objeto ResultSet
    ResultSet tabla = stm.executeQuery(sql);
    //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
    while(tabla.next()){
    //6.1 En la única iteración, obtener y alamcenar el dato de la cantidad de facturas que arrojó la consulta SQL
    cantFacturas = tabla.getInt(«cant_facturas»);
    }

    //———————————————————————————————————————————-
    //7. Cerrar la conexion a la base de datos
    this.cerrarConexionBD();
    //8. Retornar el total de carreras que está almancenado en la base de datos
    return cantFacturas;
    }
    //Inciso b
    public Vector obtenerListadoNombresProductosStock() throws SQLException
    {
    //1. Conectar a la base de datos
    this.iniciarConexionBD();
    //2. Crear el vector para almacenar la lista de nombres de productos en stock resultante de la consulta SQL a la base de datos.
    Vector listadoNombresProductosStock = new Vector();
    //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE —————————————————————————————-
    //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
    Statement stm = this.conexion.createStatement();
    //4. Definir el texto String de la consulta SQL.
    String sql = «select p.descripcion as nombres_productos from stock_productos p»;
    //5. Ejecutar la consulta y amacenar en el objeto ResultSet
    ResultSet tabla = stm.executeQuery(sql);
    //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
    //En cada iteración:
    while(tabla.next()){
    //6.1. Obtener el nombre del producto de la fila actual del objeto ResultSet
    String cadena = tabla.getString(«nombres_productos»);
    //6.2. Almacenar en el vector creado en el paso 2. el valor de nombre de producto de la fila actual del objeto ResultSet
    listadoNombresProductosStock.add(cadena);
    }
    //————————————————————————————————————————————————–
    //7. Cerrar la conexion a la base de datos
    this.cerrarConexionBD();
    //8. Retornar el objeto vector con la lista de nombres de carreras almacenados en la base de datos
    return listadoNombresProductosStock;
    }
    //OK
    public Vector obtenerCogidosFacturas() throws SQLException
    {
    //1. Conectar a la base de datos
    this.iniciarConexionBD();
    //2. Crear el vector para almacenar la lista de códigos de facturas resultante de la consulta SQL a la base de datos.
    Vector lista_codigosFacturas = new Vector();
    //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
    Statement stm = this.conexion.createStatement();
    //4. Definir el texto String de la consulta SQL.
    String sql = «select f.codigo as cogido_factura from facturas f»;
    //5. Ejecutar la consulta y amacenar en el objeto ResultSet
    ResultSet tabla = stm.executeQuery(sql);
    //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
    while(tabla.next())
    {
    //6.1. Obtener el valor de codigo de factura de la fila actual del objeto ResultSet
    String codigoFactura = tabla.getString(«cogido_factura»);
    //6.2. Almacenar en el vector creado en el paso 2. el valor de codigo de factura de la fila actual del objeto ResultSet
    lista_codigosFacturas.add(codigoFactura);
    }
    //7. Cerrar la conexion a la base de datos
    this.cerrarConexionBD();
    //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
    return lista_codigosFacturas;
    }
    //OK
    //Inciso c
    public ArrayList<Vector> obtenerDetallesProductosXFactura(String pCodigoFactura) throws SQLException
    {
    //1. Conectar a la base de datos
    this.iniciarConexionBD();
    //2. Crear la matriz de datos para almacenar el detalle de los productos de la factura segun la consulta SQL, cada fila es un Vector de String
    ArrayList<Vector> matrizDetallesProductosFactura = new ArrayList();
    //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE —————————————————————————————-
    //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
    Statement stm = this.conexion.createStatement();
    //4. Definir el texto String de la consulta SQL.
    String sql = «select p.descripcion as nombres_productos, d.cantidad_prod as cantidad_productos, d.precio_total_prod as precio_total \n» +
    » from stock_productos p \n» +
    » join detalle_facturas d on(p.codigo= d.codigo_producto) join facturas f on(f.codigo = d.codigo_factura)\n» +
    » where f.codigo='»+pCodigoFactura+»‘»;
    //5. Ejecutar la consulta y amacenar en el objeto ResultSet
    ResultSet tabla = stm.executeQuery(sql);
    //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
    //En cada iteración:
    while(tabla.next()){
    //6. Crear el Vector fila para almacenar los datos de cada fila según los campos de columnas de la consulta SQL.
    Vector fila = new Vector();
    //6.1 Agregar al vector fila el dato del campo descripcion de la consulta SQL
    fila.add(tabla.getString(«nombres_productos»));
    //6.2 Agregar al vector fila el dato del campo cantidad_prod de la consulta SQL
    fila.add(tabla.getString(«cantidad_productos»));
    //6.3 Agregar al vector fila el dato del campo precio_total_prod de la consulta SQL
    fila.add(tabla.getString(«precio_total»));
    //6.4 Agregar el ventor fila, con los datos de las tres columnas de la consulta SQL, a la tabla matriz de datos.
    matrizDetallesProductosFactura.add(fila);
    }
    //————————————————————————————————————————————————–
    //7. Cerrar la conexion a la base de datos
    this.cerrarConexionBD();
    //8. Retornar la matriz de datos con los resultados de la consulta SQL.
    return matrizDetallesProductosFactura;
    }
    }

  3. private void jButton_mostrarTotalCarrerasActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD obj_CRUD = OperacionesCRUD.getInstance();
    try
    {
    //2. Obtener la cantidad de carreras del método (obtenerCantCarreras) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    int totalCarreras = obj_CRUD.obtenerCantCarreras();
    String value = String.valueOf(totalCarreras);
    //3. Mostrar en el componente visual total_carreras_jTextField el valor de cantidad de carreras obtenido en el paso 2.
    total_carreras_jTextField.setText(value);
    }
    catch(SQLException err)
    {
    System.out.println(err.getMessage());
    }
    }
    //OK
    private void jButton_mostrarCarrerasActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD obj_CRUD = OperacionesCRUD.getInstance();
    try
    {
    //2. Obtener el vector lista de carreras del método (obtenerListadoCarreras) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    Vector listado_carreras = obj_CRUD.obtenerListadoCarreras();
    //3. Crear el objeto DefaultTableModel del jTable_ListaCarreras que debe mostrar el vector lista de carreras
    DefaultTableModel tablaVisual = (DefaultTableModel) jTable_ListaCarreras.getModel();
    //4. Setear el componente jTable_ListaCarreras con cero filas y columna de datos a mostrar.
    tablaVisual.setRowCount(0);
    tablaVisual.setColumnCount(0);
    //5. Agregar la columna de datos con cabecera «Listado de Paralelos del ITB» y vector lista de datos.
    tablaVisual.addColumn(«Listado de nombres de Carreras», listado_carreras);
    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }
    }

    private void formComponentShown(java.awt.event.ComponentEvent evt) {
    // TODO add your handling code here:
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    DefaultComboBoxModel recordList_Carr_Est = (DefaultComboBoxModel)jComboBox_Listado_Carreras_Est.getModel();
    DefaultComboBoxModel recordList_Carr_Paralelos = (DefaultComboBoxModel)jComboBox_Listado_Carreras_Paralelos.getModel();

    recordList_Carr_Est.removeAllElements();
    recordList_Carr_Paralelos.removeAllElements();

    try
    {
    Vector listado_carreas = obj_BD.obtenerListadoCarreras();
    int cant_carreras = listado_carreas.size();
    for (int fila = 0; fila < cant_carreras; fila++)
    {
    String nombre_carrera = listado_carreas.get(fila);
    recordList_Carr_Est.addElement(nombre_carrera);
    recordList_Carr_Paralelos.addElement(nombre_carrera);
    }
    recordList_Carr_Est.setSelectedItem(listado_carreas.get(0));
    recordList_Carr_Paralelos.setSelectedItem(listado_carreas.get(0));
    }

    catch(SQLException err)
    {
    err.printStackTrace();
    }

    DefaultComboBoxModel recordList_Paralelos_Est = (DefaultComboBoxModel)jComboBox_Listado_Paralelos_Est.getModel();
    recordList_Paralelos_Est.removeAllElements();

    try
    {
    Vector listado_paralelos_est = obj_BD.obtenerListaParalelos();
    int cant_paralelos = listado_paralelos_est.size();
    for(int fila = 0; fila < cant_paralelos; fila++)
    {
    String codigo_paralelo = listado_paralelos_est.get(fila);
    recordList_Paralelos_Est.addElement(codigo_paralelo);
    }
    recordList_Paralelos_Est.setSelectedItem(listado_paralelos_est.get(0));
    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }
    }

    private void jButton_mostrarEstudiantesCarreraActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD objCRUD = OperacionesCRUD.getInstance();
    //2. Obtener la lista de valores del modelo del combobox de lista de carreras.
    DefaultComboBoxModel modeloCombox = (DefaultComboBoxModel)jComboBox_Listado_Carreras_Est.getModel();
    //3. Obtener la carrera seleccionado desde el combobox jComboBox_Listado_Carreras_Est
    String nomb_carrera = String.valueOf(modeloCombox.getSelectedItem());
    try
    {
    //4. Obtener la matriz de datos que devuelve el método (obtenerEstudInscritosPorCarrera) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    ArrayList<Vector> matriz_datos_est = objCRUD.obtenerEstudInscritosPorCarrera(nomb_carrera);
    //5. Crear el objeto DefaultTableModel del jTable que debe mostrar la matriz de datos de los estudiantes que están inscritos en una carrera en particular
    DefaultTableModel modelo_tablaVisual = (DefaultTableModel) jTable_ListaEstudiantes.getModel();
    //6. Setear el componente jTable_ListaEstudiantes con cero filas a mostrar.
    modelo_tablaVisual.setRowCount(0);
    //7. Obtener la cantidad de filas que arroja la consulta a la base de datos almacenada en la matriz de datos.
    int cant_reg_est = matriz_datos_est.size();
    //8. Recorrer cada fila de la matriz de datos de los estudiantes inscritos en una carrera en particular y para cada iteración resolver:
    for(int i = 0; i < cant_reg_est; i++)
    {
    Vector datos_estd = matriz_datos_est.get(i);
    modelo_tablaVisual.addRow(datos_estd);
    }
    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }
    }
    //OK
    private void jButton_mostrarParalelosCarreraActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
    //2. Obtener la lista de valores del modelo del combobox de lista de carreras.
    DefaultComboBoxModel modeloCombox = (DefaultComboBoxModel)jComboBox_Listado_Carreras_Paralelos.getModel();
    //3. Obtener la carrera seleccionada desde el combobox jComboBox_Listado_Carreras_Paralelos
    String nomb_carrera = String.valueOf(modeloCombox.getSelectedItem());
    try
    {
    //4. Obtener el vector lista de paralelos del método (obtenerListaParalelosCarrera) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    Vector lista_paralelos = obj_BD.obtenerListaParalelosCarrera(nomb_carrera);
    //5. Crear el objeto DefaultTableModel del jTable que debe mostrar el vector lista de paralelos
    DefaultTableModel modeloTablaVisual = (DefaultTableModel)jTable_ListaParalelos.getModel();
    //6. Setear el componente jTable_ListaParalelos con cero filas y columna de datos a mostrar.
    modeloTablaVisual.setColumnCount(0);
    modeloTablaVisual.setRowCount(0);
    //7. Agregar la columna de datos con cabecera «Listado de Paralelos del ITB» y vector lista de datos «lista_paralelos».
    modeloTablaVisual.addColumn(«Listado de Paralelos del ITB», lista_paralelos);
    }
    catch(SQLException err)
    {
    err.printStackTrace();
    }
    }
    //OK
    private void jButton_mostrarEstudiantesParaleloActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    //1. Obtener la instancia única objeto de la clase OperacionesCRUD
    OperacionesCRUD objCRUD = OperacionesCRUD.getInstance();
    //2. Obtener la lista de valores del modelo del combobox de lista de paralelos.
    DefaultComboBoxModel modeloCombox = (DefaultComboBoxModel) jComboBox_Listado_Paralelos_Est.getModel();
    //3. Obtener el paralelo seleccionado desde el combobox jComboBox_Listado_Paralelos_Est
    String nomb_paralelo = String.valueOf(modeloCombox.getSelectedItem());
    try {
    //4. Obtener la matriz de datos que devuelve el método (obtenerEstudInscritosPorParalelo) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
    ArrayList<Vector> matriz_datos_estuds = objCRUD.obtenerEstudInscritosPorParalelo(nomb_paralelo);
    //5. Crear el objeto DefaultTableModel del jTable que debe mostrar la matriz de datos de los estudiantes que están inscritos en un paralelo en particular
    DefaultTableModel modelo_tablaVisual = (DefaultTableModel) jTable_ListaEstudiantes.getModel();
    //6. Setear el componente jTable_ListaEstudiantes con cero filas a mostrar.
    modelo_tablaVisual.setRowCount(0);
    //7. Recorrer cada fila de la matriz de datos de los estudiantes inscritos en un paralelo en particular y para cada iteración resolver:
    for (Vector objVector: matriz_datos_estuds) {
    modelo_tablaVisual.addRow(objVector);
    }
    } catch(SQLException err) {
    err.printStackTrace();
    }
    }

    /**
    * @param args the command line arguments
    */

  4. Excelente solo una cosa que no he logrado encontrar es como almacenar los datos si los estamos escribiendo desde un jtext field y luego presentarlos en un text area en ningun lado encuentro ese dato
    saludos

    1. //inciso 1.
      public int obtenerCantCarreras() throws SQLException //CONSULTA 1, PARTE 1.
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Variable para almacenar el total de carreras almacenadas en la base de datos.
      int totalCarreras = 0;
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select count(*) as total_carreras from carreras «;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      totalCarreras = tabla.getInt(«total_carreras»);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el total de carreras que está almancenado en la base de datos
      return totalCarreras;
      }
      //inciso 2.
      public Vector obtenerListadoCarreras() throws SQLException //CONSULTA 2
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de nombres de carreras resultante de la consulta SQL a la base de datos.
      Vector listado_carreras = new Vector();
      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select nombre as nombres_carreras from carreras «;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String nombre_carrera = tabla.getString(«nombres_carreras»);
      listado_carreras.add(nombre_carrera);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de nombres de carreras almacenados en la base de datos
      return listado_carreras;
      }
      //OK
      public Vector obtenerListaParalelos() throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de códgidos de paralelos resultante de la consulta SQL a la base de datos.
      Vector lista_paralelos = new Vector();

      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select nombre as PARALELOS from paralelos «;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      //6.1. Obtener el valor de columna de la fila actual del objeto ResultSet
      String valorColumna = tabla.getString(«PARALELOS»);
      //6.2. Almacenar en el vector creado en el paso 2. el valor de columna de la fila actual del objeto ResultSet
      lista_paralelos.add(valorColumna);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
      return lista_paralelos;
      }
      //Inciso 3
      public Vector obtenerListaParalelosCarrera(String p_nombre_carrera) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de códgidos de paralelos resultante de la consulta SQL a la base de datos.
      Vector lista_paralelos = new Vector();
      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = » select p.nombre as PARALELOS\n» +
      » FROM \n» +
      » paralelos p \n» +
      » join \n» +
      » carreras c on(p.cod_carrera = c.cod_carrera)\n» +
      » where c.nombre = ‘»+ p_nombre_carrera + «‘»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String nomb_paralelo = tabla.getString(«PARALELOS»);
      //String nomb_paralelo = tabla.getString(1);
      lista_paralelos.add(nomb_paralelo);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
      return lista_paralelos;
      }

    2. //inciso 1.
      public int obtenerCantCarreras() throws SQLException //CONSULTA 1, PARTE 1.
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Variable para almacenar el total de carreras almacenadas en la base de datos.
      int totalCarreras = 0;
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » count(*) as total_carreras\n» +
      » from \n» +
      » carreras»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      totalCarreras = tabla.getInt(«total_carreras»);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el total de carreras que está almancenado en la base de datos
      return totalCarreras;
      }
      //inciso 2.
      public Vector obtenerListadoCarreras() throws SQLException //CONSULTA 2
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de nombres de carreras resultante de la consulta SQL a la base de datos.
      Vector listado_carreras = new Vector();
      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » nombre as nombres_carrera\n» +
      » from\n» +
      » carreras»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String nombre_carrera = tabla.getString(«nombres_carrera»);
      listado_carreras.add(nombre_carrera);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de nombres de carreras almacenados en la base de datos
      return listado_carreras;
      }
      //OK
      public Vector obtenerListaParalelos() throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de códgidos de paralelos resultante de la consulta SQL a la base de datos.
      Vector lista_paralelos = new Vector();

      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select p.nombre as PARALELOS from paralelos p»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      //6.1. Obtener el valor de columna de la fila actual del objeto ResultSet
      String valorColumna = tabla.getString(«PARALELOS»);
      //6.2. Almacenar en el vector creado en el paso 2. el valor de columna de la fila actual del objeto ResultSet
      lista_paralelos.add(valorColumna);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
      return lista_paralelos;
      }
      //Inciso 3
      public Vector obtenerListaParalelosCarrera(String p_nombre_carrera) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de nombres de paralelos resultante de la consulta SQL a la base de datos.
      Vector lista_paralelos = new Vector();
      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » p.nombre as PARALELOS\n» +
      » from\n» +
      » paralelos p\n» +
      » join \n» +
      » carreras c on(p.cod_carrera = c.cod_carrera)\n» +
      » where\n» +
      » c.nombre = ‘» + p_nombre_carrera + «‘»;
      //5. Ejecutar la consulta y almacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String nombre_paralelo = tabla.getString(«PARALELOS»);
      lista_paralelos.add(nombre_paralelo);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
      return lista_paralelos;
      }
      //Inciso 4
      public ArrayList> obtenerEstudInscritosPorCarrera(String p_nombre_carrera) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear la matriz de datos para almacenar la consulta SQL, cada fila es un Vector de String
      ArrayList> matriz_datos = new ArrayList();
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » e.cedula as CEDULA_EST,\n» +
      » e.nombres as NOMBRE_EST,\n» +
      » e.apellidos as APELLIDOS_EST\n» +
      » from \n» +
      » inscripciones_estudiantes i\n» +
      » join \n» +
      » estudiantes e on (i.cedula = e.cedula)\n» +
      » join \n» +
      » carreras c on(i.cod_carrera = c.cod_carrera)\n» +
      » where\n» +
      » c.nombre = ‘» + p_nombre_carrera + «‘»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String cedula, nombre, apellidos;
      cedula = tabla.getString(«CEDULA_EST»);
      nombre = tabla.getString(«NOMBRE_EST»);
      apellidos = tabla.getString(«APELLIDOS_EST»);
      Vector datos_estudiante = new Vector();
      datos_estudiante.add(cedula);
      datos_estudiante.add(nombre);
      datos_estudiante.add(apellidos);
      matriz_datos.add(datos_estudiante);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar la matriz de datos con los resultados de la consulta SQL.
      return matriz_datos;
      }
      //Inciso 5
      public ArrayList> obtenerEstudInscritosPorParalelo(String p_nombre_paralelo) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear la matriz de datos para almacenar la consulta SQL, cada fila es un Vector de String
      ArrayList> matriz_datos = new ArrayList>();
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » e.cedula as CEDULA_EST,\n» +
      » e.nombres as NOMBRE_EST,\n» +
      » e.apellidos as APELLIDOS_EST\n» +
      » from\n» +
      » inscripciones_estudiantes i\n» +
      » join \n» +
      » estudiantes e on(i.cedula = e.cedula)\n» +
      » join \n» +
      » paralelos p on(p.cod_paralelo = i.cod_paralelo)\n» +
      » where\n» +
      » p.nombre = ‘» + p_nombre_paralelo + «‘»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String cedula, nombre, apellidos;
      cedula = tabla.getString(«CEDULA_EST»);
      nombre = tabla.getString(«NOMBRE_EST»);
      apellidos = tabla.getString(«APELLIDOS_EST»);
      Vector datos_estudiante = new Vector();
      datos_estudiante.add(cedula);
      datos_estudiante.add(nombre);
      datos_estudiante.add(apellidos);
      matriz_datos.add(datos_estudiante);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar la matriz de datos con los resultados de la consulta SQL.
      return matriz_datos;
      }

      }

      20:32
      private void jButton_mostrarTotalCarrerasActionPerformed(java.awt.event.ActionEvent evt) {
      // TODO add your handling code here:
      //1. Obtener la instancia única objeto de la clase OperacionesCRUD
      OperacionesCRUD obj_CRUD = OperacionesCRUD.getInstance();
      try
      {
      //2. Obtener la cantidad de carreras del método (obtenerCantCarreras) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
      int totalCarreras = obj_CRUD.obtenerCantCarreras();
      String value = String.valueOf(totalCarreras);
      //3. Mostrar en el componente visual total_carreras_jTextField el valor de cantidad de carreras obtenido en el paso 2.
      total_carreras_jTextField.setText(value);
      }
      catch(SQLException err)
      {
      System.out.println(err.getMessage());
      }
      }
      //OK
      private void jButton_mostrarCarrerasActionPerformed(java.awt.event.ActionEvent evt) {
      // TODO add your handling code here:
      //1. Obtener la instancia única objeto de la clase OperacionesCRUD
      OperacionesCRUD obj_CRUD = OperacionesCRUD.getInstance();
      try
      {
      //2. Obtener el vector lista de carreras del método (obtenerListadoCarreras) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
      Vector listado_carreras = obj_CRUD.obtenerListadoCarreras();
      //3. Crear el objeto DefaultTableModel del jTable_ListaCarreras que debe mostrar el vector lista de carreras
      DefaultTableModel tablaVisual = (DefaultTableModel) jTable_ListaCarreras.getModel();
      //4. Setear el componente jTable_ListaCarreras con cero filas y columna de datos a mostrar.
      tablaVisual.setRowCount(0);
      tablaVisual.setColumnCount(0);
      //5. Agregar la columna de datos con cabecera «Listado de Paralelos del ITB» y vector lista de datos.
      tablaVisual.addColumn(«Listado de nombres de Carreras», listado_carreras);
      }
      catch(SQLException err)
      {
      err.printStackTrace();
      }
      }

      20:33
      private void jButton_mostrarEstudiantesCarreraActionPerformed(java.awt.event.ActionEvent evt) {
      // TODO add your handling code here:
      //1. Obtener la instancia única objeto de la clase OperacionesCRUD
      OperacionesCRUD objCRUD = OperacionesCRUD.getInstance();
      //2. Obtener la lista de valores del modelo del combobox de lista de carreras.
      DefaultComboBoxModel modeloCombox = (DefaultComboBoxModel)jComboBox_Listado_Carreras_Est.getModel();
      //3. Obtener la carrera seleccionado desde el combobox jComboBox_Listado_Carreras_Est
      String nombre_carrera = (String)modeloCombox.getSelectedItem();
      try
      {
      //4. Obtener la matriz de datos que devuelve el método (obtenerEstudInscritosPorCarrera) que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
      ArrayList> matriz_datos = objCRUD.obtenerEstudInscritosPorCarrera(nombre_carrera);
      //5. Crear el objeto DefaultTableModel del jTable que debe mostrar la matriz de datos de los estudiantes que están inscritos en una carrera en particular
      DefaultTableModel modeloTablaVisual = (DefaultTableModel)jTable_ListaEstudiantes.getModel();
      //6. Setear el componente jTable_ListaEstudiantes con cero filas a mostrar.
      modeloTablaVisual.setRowCount(0);
      //7. Obtener la cantidad de filas que arroja la consulta a la base de datos almacenada en la matriz de datos.
      int cantRegistrosEst = matriz_datos.size();
      //8. Recorrer cada fila de la matriz de datos de los estudiantes inscritos en una carrera en particular y para cada iteración resolver:
      for(int i = 0; i matriz_datos = objCRUD.obtenerEstudInscritosPorParalelo(nombre_paralelo);
      //5. Crear el objeto DefaultTableModel del jTable que debe mostrar la matriz de datos de los estudiantes que están inscritos en un paralelo en particular
      DefaultTableModel modeloTablaVisual = (DefaultTableModel)jTable_ListaEstudiantes.getModel();
      //6. Setear el componente jTable_ListaEstudiantes con cero filas a mostrar.
      modeloTablaVisual.setRowCount(0);
      //7. Obtener la cantidad de filas que arroja la consulta a la base de datos almacenada en la matriz de datos.
      int cantRegistrosEst = matriz_datos.size();
      //8. Recorrer cada fila de la matriz de datos de los estudiantes inscritos en un paralelo en particular y para cada iteración resolver:
      for(int i = 0; i < cantRegistrosEst; i++)
      {
      Vector datos_estudiante = matriz_datos.get(i);
      modeloTablaVisual.addRow(datos_estudiante);
      }
      }
      catch(SQLException err)
      {
      err.printStackTrace();
      }
      }

      20:34
      CONSULTAS
      1. El total de carreras que oferta el ITB.
      select
      count(*) as Total_Carreras
      from carreras

      _________________________________

      2. El listado con los nombres de cada carrera que oferta el ITB
      select
      nombre as nombre_carreras
      from
      carreras

      _________________________________

      –3. El listado de paralelos con sus respectivos nombres de paralalos a filtrar por nombre de carreras.
      –Tecnica JOIN
      select
      p.nombre as PARALELOS
      from
      paralelos p
      join
      carreras c on(p.cod_carrera = c.cod_carrera)
      where c.nombre = '&CARRERA'

      _________________________________
      –4. El listado de estudiantes (cédula, nombres y apellidos)
      –inscritos a filtrar por carreras.
      select
      e.cedula as CEDULA_EST,
      e.nombres as NOMBRES_EST,
      e.apellidos as APELLIDOS_EST
      from
      inscripciones_estudiantes i
      join
      estudiantes e on(i.cedula = e.cedula)
      join
      carreras c on(i.cod_carrera = c.cod_carrera)
      where c.nombre = '&nombre_carrera'

      _________________________________
      5. El listado de estudiantes (cédula, nombres y apellidos) inscritos a filtrar por nombre de paralelos.
      select
      e.cedula as CEDULA_EST,
      e.nombres as NOMBRES_EST,
      e.apellidos as APELLIDOS_EST
      from
      inscripciones_estudiantes i
      join
      estudiantes e on(i.cedula = e.cedula)
      join
      paralelos p on(i.cod_paralelo = p.cod_paralelo)
      where p.nombre = '&nombre_paralelo'

    1. –c. El listado de estudiantes con los datos de cédula, nombres y apellidos, a filtrar, por
      –nombre de la carrera en que se inscribió en la UBE
      select
      i.estudiante_cedula as cedula
      p.nombres as nombres,
      p.apellidos as apellidos,
      p.sexo as sexo
      from inscripciones i
      join estudiantes e on i.estudiante_cedula = e.persona_cedula
      join personas p on p.cedula = e.persona_cedula
      join carreras c on c.codigo_carr= i.carrera_codigo_carr
      where c.nombre= ‘&nombre_carrera’

      ///////ORACLE///////
      private void jButton_MostrarTotalPersonasActionPerformed(java.awt.event.ActionEvent evt) {
      // TODO add your handling code here:
      //——- Implementar la lógica correspondiente (descomentar el código base con comentarios de párrafo /* */) ———–
      OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
      try
      {
      int cantidad_personas = obj_BD.obtenerCantPersonasAdmisiones();

      String txtCantidadPersonas = String.valueOf(cantidad_personas);
      total_personas_jTextField.setText(txtCantidadPersonas);

      }
      catch(SQLException err)
      {
      System.out.println(err.getMessage());
      }
      //———————————————————————————–
      }
      //OK
      private void jButton_mostrarCarrerasUBEActionPerformed(java.awt.event.ActionEvent evt) {
      // TODO add your handling code here:
      //——- Implementar la lógica correspondiente (descomentar el código base con comentarios de párrafo /* */) —————————

      //1. Obtener la instancia única objeto de la clase OperacionesCRUD
      OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
      try
      {
      //2. Obtener el vector lista de carreras del método que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
      Vector listado_carreras = obj_BD.obtenerListadoCarreras();
      //3. Crear el objeto DefaultTableModel del jTable_ListadoCarrerasUBE que debe mostrar el vector lista de carreras
      DefaultTableModel tablaModelo = (DefaultTableModel) jTable_ListadoCarrerasUBE.getModel();
      //4. Setear el componente jTable_ListadoCarrerasUBE, desde el objeto DefaultTableModel, con cero filas y cero columnas de datos a mostrar.
      tablaModelo.setRowCount(0);
      tablaModelo.setColumnCount(0);
      //5. Agregar, desde el objeto DefaultTableModel, la columna de datos con cabecera «Nombres de Carreras» y vector lista de datos con los nombres de las carreras.
      tablaModelo.addColumn(«Nombres de Carreras», listado_carreras);
      }
      catch(SQLException err)
      {
      err.printStackTrace();
      }

      //—————————————————————————————————————————————-
      }

      private void formComponentShown(java.awt.event.ComponentEvent evt) {
      // TODO add your handling code here:
      OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
      DefaultComboBoxModel recordList_Carr_Est = (DefaultComboBoxModel)jComboBox_Listado_CarrerasUBE.getModel();
      recordList_Carr_Est.removeAllElements();
      try
      {
      Vector listado_carreras = obj_BD.obtenerListadoCarreras();
      int cant_carreras = listado_carreras.size();
      for (int fila = 0; fila < cant_carreras; fila++)
      {
      String nombre_carrera = listado_carreras.get(fila);
      recordList_Carr_Est.addElement(nombre_carrera);
      }
      recordList_Carr_Est.setSelectedItem(listado_carreras.get(0));
      }
      catch(SQLException err)
      {
      err.printStackTrace();
      }
      }

      private void jButton_mostrarEstudiantesUBEActionPerformed(java.awt.event.ActionEvent evt) {
      // TODO add your handling code here:
      //——- Implementar la lógica correspondiente (descomentar el código base con comentarios de párrafo /* */) —————————

      //1. Obtener la instancia única objeto de la clase OperacionesCRUD
      OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
      //2. Obtener la lista de valores del modelo del jComboBox_Listado_CarrerasUBE de lista de universidades.
      DefaultComboBoxModel comboBoxModelo = (DefaultComboBoxModel) jComboBox_Listado_CarrerasUBE.getModel();
      //3. Obtener la carrera seleccionado desde el combobox jComboBox_Listado_CarrerasUBE
      String carrera = String.valueOf(comboBoxModelo.getSelectedItem());
      try
      {
      //4. Obtener la matriz de datos que devuelve el método que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
      ArrayList<Vector> matriz_datos = obj_BD.obtenerEstudiantesInscritosCarrerasUBE(carrera);
      //5. Crear el objeto DefaultTableModel del jTable que debe mostrar la matriz de datos de los estudiantes que alcanzaron cupos en una universidad en particular.
      DefaultTableModel tablaModelo = (DefaultTableModel) jTable_ListadoEstudiantesUBE.getModel();
      //6. Setear, desde el objeto DefaultTableModel, el componente jTable_ListadoEstudiantesUBE con cero filas a mostrar.
      tablaModelo.setRowCount(0);
      //7. Obtener la cantidad de filas que arroja la consulta a la base de datos almacenada en la matriz de datos.
      //8. Recorrer cada fila de la matriz de datos de los estudiantes con cupos en una universidad en particular y para cada iteración resolver:
      for(Vector filaDatos : matriz_datos) {
      //8.1 En cada iteración, agregar al jTable_ListadoEstudiantesUBE, desde el objeto DefaultTableModel, los datos de cada una de las filas que están almacenadas en la matriz de datos.
      tablaModelo.addRow(filaDatos);
      }

      }
      catch(SQLException err)
      {
      err.printStackTrace();
      }

      ——NetBEans–
      —-OPERACIONES CRUD—-
      public int obtenerCantPersonasAdmisiones() throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Variable para almacenar el total de personas registradas por adminisiones almacenadas en la base de datos.
      int cant_personas = 0;
      //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE ————————————————————————
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String query = «select COUNT(*) as TOTAL_Personas »
      + » from personas p»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(query);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next()) {
      //6.1 En cada iteración, obtener y alamcenar el dato de la cantidad de carreras que arrojó la consulta SQL
      cant_personas = tabla.getInt(«TOTAL_Personas»);
      }

      //———————————————————————————————————————————-
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el total de carreras que está almancenado en la base de datos
      return cant_personas;
      }

      //OK
      public Vector obtenerListadoCarreras() throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de nombres de carreras resultante de la consulta SQL a la base de datos.
      Vector listado_carreras = new Vector();
      //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE —————————————————————————————-
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String query = «select c.nombre as NOMBRES_CARRERAS »
      + » from carreras c»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(query);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next()) {
      //En cada iteración:
      //6.1. Obtener el valor de columna de la fila actual del objeto ResultSet
      String nombre_carrera = tabla.getString(«NOMBRES_CARRERAS»);
      //6.2. Almacenar en el vector creado en el paso 2. el valor de columna de la fila actual del objeto ResultSet
      listado_carreras.add(nombre_carrera);
      }
      //————————————————————————————————————————————————–
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de nombres de carreras almacenados en la base de datos
      return listado_carreras;
      }

      //OK
      public ArrayList<Vector> obtenerEstudiantesInscritosCarrerasUBE(String p_nombre_carreraUBE) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear la matriz de datos para almacenar la consulta SQL, cada fila es un Vector de String
      ArrayList<Vector> matriz_datos = new ArrayList();
      //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE —————————————————————————————-
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String query = «select \n» +
      » i.estudiante_cedula as cedula, \n» +
      » p.nombres as nombres, \n» +
      » p.apellidos as apellidos,\n» +
      » p.sexo as sexo\n» +
      » from inscipciones i\n» +
      » join estudiantes e on i.estudiante_cedula = e.persona_cedula\n» +
      » join personas p on p.cedula = e.persona_cedula\n» +
      » join carreras c on c.codigo_carr = i.carrera_codigo_carr\n» +
      » where c.nombre = ‘»+p_nombre_carreraUBE+»‘»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(query);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next()) {
      //En cada iteración:
      //6. Crear el Vector fila para almacenar los datos de cada fila según los campos de columnas de la consulta SQL.
      Vector datosEstudiantes = new Vector();
      //6.1 Agregar al vector fila el dato de la columna CEDULA de la consulta SQL
      String cedula = tabla.getString(«cedula»);
      datosEstudiantes.add(cedula);
      //6.2 Agregar al vector fila el dato de la columna NOMBRES de la consulta SQL
      String nombres = tabla.getString(«nombres»);
      datosEstudiantes.add(nombres);
      //6.3 Agregar al vector fila el dato de la columna APELLIDOS de la consulta SQL
      String apellidos = tabla.getString(«apellidos»);
      datosEstudiantes.add(apellidos);
      //6.4 Agregar al vector fila el dato de la columna SEXO de la consulta SQL
      String sexo = tabla.getString(«sexo»);
      datosEstudiantes.add(sexo);
      //6.5 Agregar el ventor fila con los datos de las tres columnas de la consulta SQL a la tabla matriz de datos.
      matriz_datos.add(datosEstudiantes);
      }

      //————————————————————————————————————————————————–
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar la matriz de datos con los resultados de la consulta SQL.
      return matriz_datos;
      }
      }

  5. ahorro un montón de tiempo leyendo tus post Jarroba, muy bien explicado! +10 a este post por explicar inclusive con metodos y ejemplos! mil gracias

  6. Buen dia, quiero implementar un programa el tenga un menú de usuario 
    en la opción 1 del menú estaría la de registrar usuarios y les solicita estos siguientes datos:
    Id Usuario
    Nombre
    Nick-Name (apodo)
    Puntajes
    Pregunta es, como hago para que se almacenen en un arreglo en posición diferente ejemplo
    NOMBRES
    [mery, null, null]
    NICK
    [panda, null, null]
    Id Usuario
    [78569, 0, 0]
    pero el usuario sea el que los registre cuando quiera, osea en esa registre a Mery, Mery pueda ir y observar sus datos, luego entre nuevamente a la opción 1 y registre a Edwar, y quede en la posición 1 con sus datos
    NOMBRES
    [mery, edwar, null]
    NICK
    [panda, miuyi, null]
    Id Usuario
    [78569, 12345, 0]

    asi sucesivamente ??
    gracias.

    1. Acabas de definir los objetos.
      Haz un objeto usuario, especifica los parámetros y haz un arraylist de tus usuarios.

  7. hola buen día gracias por su explicación en el tema
    tengo una pregunta si quiero hacer un array de una lista de asientos de un autobús agregando valores que deben ir organizados como a1,a2 hasta a 4 y b1,b2 y así consecutivamente como se podría hacer. esto es para la venta de un boleto de autobús y también tomar en cuenta si es un estudiante o un adulto esto lo pude realizar a través de un switch pero mi problema fue como poder organizar esos valores y que se pudieran mostrar en pantalla el ejercicio como ver que asiendo esta desocupado o esta ocupado.
    si me pudiera ayudar se lo agradecería mucho.

      1. necesito lo mismo que veronica pero mi proyecto es en java web con netbeans y mysql alguien me puede ayudar?
        mi proyecto es sobre una venta de tickets para un terminal de transporte y necesito la parte de los asientos y también mostrar en pantalla los q están ocupados y los q no

        1. Te adjunto uno que te puede servir, solo tendrías que editar variables y si es posible nombre de botones
          –oper CRUD

          //Inciso a
          public int obtenerCantFacturasGeneradas() throws SQLException
          {
          //1. Conectar a la base de datos
          this.iniciarConexionBD();
          //2. Variable para almacenar el total de facturas almacenadas en la base de datos.
          int cantFacturas = 0;
          //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE ————————————————————————
          //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
          Statement stm = this.conexion.createStatement();
          //4. Definir el texto String de la consulta SQL.
          String sql = «select count(*) as Total_Facturas from facturas» ;
          //5. Ejecutar la consulta y amacenar en el objeto ResultSet
          ResultSet tabla = stm.executeQuery(sql);

          //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
          while(tabla.next())
          {
          //6.1 En la única iteración, obtener y alamcenar el dato de la cantidad de facturas que arrojó la consulta SQL
          cantFacturas = tabla.getInt(«Total_Facturas»);
          }
          //———————————————————————————————————————————-
          //7. Cerrar la conexion a la base de datos
          this.cerrarConexionBD();
          //8. Retornar el total de carreras que está almancenado en la base de datos
          return cantFacturas;
          }
          //Inciso b
          public Vector obtenerListadoNombresProductosStock() throws SQLException
          {
          //1. Conectar a la base de datos
          this.iniciarConexionBD();
          //2. Crear el vector para almacenar la lista de nombres de productos en stock resultante de la consulta SQL a la base de datos.
          Vector listadoNombresProductosStock = new Vector();
          //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE —————————————————————————————-
          //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
          Statement stm = this.conexion.createStatement();
          //4. Definir el texto String de la consulta SQL.
          String sql = «select descripcion from stock_productos p»;
          //5. Ejecutar la consulta y amacenar en el objeto ResultSet
          ResultSet tabla = stm.executeQuery(sql);
          //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
          while (tabla.next()){
          //En cada iteración:
          //6.1. Obtener el nombre del producto de la fila actual del objeto ResultSet
          String lista = tabla.getString(«descripcion»);
          //6.2. Almacenar en el vector creado en el paso 2. el valor de nombre de producto de la fila actual del objeto ResultSet
          listadoNombresProductosStock.add(lista);
          }
          //————————————————————————————————————————————————–
          //7. Cerrar la conexion a la base de datos
          this.cerrarConexionBD();
          //8. Retornar el objeto vector con la lista de nombres de carreras almacenados en la base de datos
          return listadoNombresProductosStock;
          }
          //OK
          public Vector obtenerCogidosFacturas() throws SQLException
          {
          //1. Conectar a la base de datos
          this.iniciarConexionBD();
          //2. Crear el vector para almacenar la lista de códigos de facturas resultante de la consulta SQL a la base de datos.
          Vector lista_codigosFacturas = new Vector();
          //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
          Statement stm = this.conexion.createStatement();
          //4. Definir el texto String de la consulta SQL.
          String sql = «select f.codigo as cogido_factura from facturas f»;
          //5. Ejecutar la consulta y amacenar en el objeto ResultSet
          ResultSet tabla = stm.executeQuery(sql);
          //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
          while(tabla.next())
          {
          //6.1. Obtener el valor de codigo de factura de la fila actual del objeto ResultSet
          String codigoFactura = tabla.getString(«cogido_factura»);
          //6.2. Almacenar en el vector creado en el paso 2. el valor de codigo de factura de la fila actual del objeto ResultSet
          lista_codigosFacturas.add(codigoFactura);
          }
          //7. Cerrar la conexion a la base de datos
          this.cerrarConexionBD();
          //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
          return lista_codigosFacturas;
          }
          //OK
          //Inciso c
          public ArrayList<Vector> obtenerDetallesProductosXFactura(String pCodigoFactura) throws SQLException
          {
          //1. Conectar a la base de datos
          this.iniciarConexionBD();
          //2. Crear la matriz de datos para almacenar el detalle de los productos de la factura segun la consulta SQL, cada fila es un Vector de String
          ArrayList<Vector> matrizDetallesProductosFactura = new ArrayList();
          //——————- COMPLETAR LA LÓGICA CORRESPONDIENTE —————————————————————————————-
          //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
          Statement stm = this.conexion.createStatement();
          //4. Definir el texto String de la consulta SQL.
          String sql = «SELECT s.descripcion , d.cantidad_prod , d.precio_total_prod \n» +
          «FROM DETALLE_FACTURAS d JOIN stock_productos s ON( s.codigo = d.codigo_producto)\n» +
          «WHERE d.CODIGO_FACTURA = ‘»+pCodigoFactura+»‘»;
          //5. Ejecutar la consulta y amacenar en el objeto ResultSet
          ResultSet tabla = stm.executeQuery(sql);
          //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
          while (tabla.next()){
          //En cada iteración:
          //6. Crear el Vector fila para almacenar los datos de cada fila según los campos de columnas de la consulta SQL.
          Vector filaDatos = new Vector ();
          //6.1 Agregar al vector fila el dato del campo descripcion de la consulta SQL
          String Descripcion_Producto = tabla.getString(«descripcion»);
          //6.2 Agregar al vector fila el dato del campo cantidad_prod de la consulta SQL
          String Cantidad_Producto = tabla.getString(«cantidad_prod»);
          //6.3 Agregar al vector fila el dato del campo precio_total_prod de la consulta SQL
          String Precio_Producto = tabla.getString(«precio_total_prod»);
          //6.4 Agregar el ventor fila, con los datos de las tres columnas de la consulta SQL, a la tabla matriz de datos.
          filaDatos.add(Descripcion_Producto);
          filaDatos.add(Cantidad_Producto);
          filaDatos.add(Precio_Producto);
          matrizDetallesProductosFactura.add(filaDatos);
          }
          //————————————————————————————————————————————————–
          //7. Cerrar la conexion a la base de datos
          this.cerrarConexionBD();
          //8. Retornar la matriz de datos con los resultados de la consulta SQL.
          return matrizDetallesProductosFactura;
          }
          }

          –vent princ
          private void jButton_mostrarCantFacturasActionPerformed(java.awt.event.ActionEvent evt) {
          // TODO add your handling code here:
          //——- Implementar la lógica correspondiente ———–
          OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
          try
          {
          int cantFacturas = obj_BD.obtenerCantFacturasGeneradas();
          String cant = String.valueOf(cantFacturas);
          jTextField_cantFacturas.setText(cant);

          }
          catch(SQLException err)
          {
          System.out.println(err.getMessage());
          }
          //———————————————————————————–
          }
          //OK
          private void jButton_mostrarListadoProductosStockActionPerformed(java.awt.event.ActionEvent evt) {
          // TODO add your handling code here:
          //——- Implementar la lógica correspondiente ————————–
          //1. Obtener la instancia única objeto de la clase OperacionesCRUD
          OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
          try
          {
          //2. Obtener el vector lista con los códigos de facturas del método que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
          Vector listadoNombresProductosStock = obj_BD.obtenerListadoNombresProductosStock();
          System.out.println(listadoNombresProductosStock.toString());
          //3. Crear el objeto DefaultTableModel del jTable_ListadoNombresProductosStock que debe mostrar el vector lista de códigos de facturas
          DefaultTableModel tablaVisual = (DefaultTableModel) jTable_ListadoNombresProductosStock.getModel();
          //4. Setear el componente jTable_ListadoNombresProductosStock, desde el objeto DefaultTableModel, con cero filas y cero columnas de datos a mostrar.
          tablaVisual.setRowCount(0);
          tablaVisual.setColumnCount(0);

          //5. Agregar, desde el objeto DefaultTableModel, la columna de datos con cabecera «Descripcion Productos en Stock» y vector lista de datos con los códgios de las facturas generadas.
          tablaVisual.addColumn(«Descripcion Productos en Stock»,listadoNombresProductosStock );
          }
          catch(SQLException err)
          {
          err.printStackTrace();
          }

          //—————————————————————————————————————————————-
          }

          private void formComponentShown(java.awt.event.ComponentEvent evt) {
          // TODO add your handling code here:
          OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
          DefaultComboBoxModel recordList_Carr_Est = (DefaultComboBoxModel)jComboBox_listadoCodigosFacturas.getModel();
          recordList_Carr_Est.removeAllElements();
          try
          {
          Vector listado_codigosFacturas = obj_BD.obtenerCogidosFacturas();
          int cant_carreras = listado_codigosFacturas.size();
          for (int fila = 0; fila < cant_carreras; fila++)
          {
          String nombre_carrera = listado_codigosFacturas.get(fila);
          recordList_Carr_Est.addElement(nombre_carrera);
          }
          recordList_Carr_Est.setSelectedItem(listado_codigosFacturas.get(0));
          }
          catch(SQLException err)
          {
          err.printStackTrace();
          }
          }

          private void jButton_mostrarDetallesFacturaActionPerformed(java.awt.event.ActionEvent evt) {
          // TODO add your handling code here:
          //——- Implementar la lógica correspondiente —————————
          //1. Obtener la instancia única objeto de la clase OperacionesCRUD
          OperacionesCRUD obj_BD = OperacionesCRUD.getInstance();
          //2. Obtener la lista de valores del modelo del jComboBox_listadoCodigosFacturas con los datos de códigos de las facturas generadas.
          DefaultComboBoxModel recordList_Carr_Est = (DefaultComboBoxModel)jComboBox_listadoCodigosFacturas.getModel();
          //3. Obtener el código de factura seleccionado desde el combobox jComboBox_listadoCodigosFacturas
          String codigo = (String) recordList_Carr_Est.getSelectedItem();
          try
          {
          //4. Obtener la matriz de datos del detalle de productos de la factura que devuelve el método que consulta a la BD y que implementa el objeto obj_BD (OperacionesCRUD)
          ArrayList<Vector> matrizDetallesProductosFactura = obj_BD.obtenerDetallesProductosXFactura(codigo);
          //5. Crear el objeto DefaultTableModel del jTable_detallesProductosFactura que debe mostrar la matriz de datos del detalle de la factura seleccionada para filtrar.
          DefaultTableModel tablaVisual = (DefaultTableModel) jTable_detallesProductosFactura.getModel();

          //6. Setear, desde el objeto DefaultTableModel, el componente jTable_detallesProductosFactura con cero filas a mostrar.
          tablaVisual.setRowCount(0);
          //7. Obtener la cantidad de filas que arroja la consulta a la base de datos almacenada en la matriz de datos.
          int total = matrizDetallesProductosFactura.size();
          //8. Recorrer cada fila de la matriz de datos con el detalle de productos de la factura y para cada iteración resolver:
          for (int i=0; i<total; i++){
          //8.1 En cada iteración, agregar al jTable_detallesProductosFactura, desde el objeto DefaultTableModel, los datos de cada una de las filas que están almacenadas en la matriz de datos.
          Vector Fila = (Vector) matrizDetallesProductosFactura.get(i);
          tablaVisual.addRow(Fila);
          }
          }
          catch(SQLException err)
          {
          err.printStackTrace();
          }

          //—————————————————————————————————————————————-
          }

          /**
          * @param args the command line arguments
          */
          public static void main(String args[]) {
          /* Set the Nimbus look and feel */
          //
          /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
          */
          try {
          for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
          if («Nimbus».equals(info.getName())) {
          javax.swing.UIManager.setLookAndFeel(info.getClassName());
          break;
          }
          }
          } catch (ClassNotFoundException ex) {
          java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          } catch (InstantiationException ex) {
          java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          } catch (IllegalAccessException ex) {
          java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          } catch (javax.swing.UnsupportedLookAndFeelException ex) {
          java.util.logging.Logger.getLogger(VentanaPrincipalJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          }
          //

          /* Create and display the form */
          java.awt.EventQueue.invokeLater(new Runnable() {
          public void run() {
          new VentanaPrincipalJFrame().setVisible(true);
          }
          });
          }

          // Variables declaration – do not modify
          private javax.swing.JButton jButton_mostrarCantFacturas;
          private javax.swing.JButton jButton_mostrarDetallesFactura;
          private javax.swing.JButton jButton_mostrarListadoProductosStock;
          private javax.swing.JComboBox jComboBox_listadoCodigosFacturas;
          private javax.swing.JLabel jLabel1;
          private javax.swing.JLabel jLabel3;
          private javax.swing.JPanel jPanel2;
          private javax.swing.JPanel jPanel3;
          private javax.swing.JPanel jPanel4;
          private javax.swing.JScrollPane jScrollPane1;
          private javax.swing.JScrollPane jScrollPane3;
          private javax.swing.JTable jTable_ListadoNombresProductosStock;
          private javax.swing.JTable jTable_detallesProductosFactura;
          private javax.swing.JTextField jTextField_cantFacturas;
          // End of variables declaration
          }

          Conexion:
          public class ConexionBD
          {
          //jdbc:oracle:thin:@//::
          private static final String DB_URL = «jdbc:oracle:thin:@//localhost:1521/xe»;
          private static final String DB_USER = «FACTURACION»;
          private static final String DB_PASSWORD = «itb»;

          public static Connection iniciarConexion()
          {

          CONSULTAS
          –El total de facturas registradas hasta el momento en el sistema
          select
          count (*) as total_facturas
          from
          facturas

          –El listado con los nombres de productos en stock para la venta
          select
          s.descripcion as nombre_pro
          from
          stock_productos s

          –El detalle de los productos de las facturas generadas con los datos de nombre del
          —producto, cant solicitada y precio total por cada producto de la factura, a filtrar por el –código de la factura
          select
          s.descripcion as nombre_prod,
          d.cantidad_prod as cantidad_pro,
          d.precio_total_prod as precio_total
          from
          stock_productos s, detalle_facturas d
          where
          d.codigo_factura = ‘& codigo_factura’

          1. select s.descripcion, d.cantidad_prod, d.precio_total_prod
            from DETALLE_FACTURAS d join stock_productos s on( s.codigo = d.codigo_producto)
            where d.CODIGO_FACTURA = (CodigoFactura)

  8. Felicidades por el post!

    Si quisieria listar los n elementos de un arraylist que no sean null como lo debería hacer?

    1. Buenas David.
      Podrías recorrer el listado con stream y con un filtro quitar los nulles, algo así:
      List<String> miListaSinNules = miListaConNules.stream().filter(elemento -> elemento != null).collect(Collectors.toList());

    2. inscripciones:

      public class ConexionBD
      {
      //jdbc:oracle:thin:@//::
      private static final String DB_URL = «jdbc:oracle:thin:@//localhost:1521/xe»;
      private static final String DB_USER = «USER_INSCRIPCIONES»;
      private static final String DB_PASSWORD = «itb»;

      public static Connection iniciarConexion()
      {
      Connection conexion = null;
      try

      operaCrud:
      //inciso 1.
      public int obtenerCantCarreras() throws SQLException //CONSULTA 1, PARTE 1.
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Variable para almacenar el total de carreras almacenadas en la base de datos.
      int totalCarreras = 0;
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » count(*) as TOTAL_CARRERAS\n» +
      » from \n» +
      » carreras»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      totalCarreras = tabla.getInt(«TOTAL_CARRERAS»);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el total de carreras que está almancenado en la base de datos
      System.out.println(«Se ejecutó método obtenerCantCarreras que implementa la consulta inciso 1.»);
      return totalCarreras;
      }
      //inciso 2.
      public Vector obtenerListadoCarreras() throws SQLException //CONSULTA 2
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de nombres de carreras resultante de la consulta SQL a la base de datos.
      Vector listado_carreras = new Vector();
      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » nombre as CARRERAS\n» +
      » from\n» +
      » carreras»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String nombre_carrera = tabla.getString(«CARRERAS»);
      listado_carreras.add(nombre_carrera);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de nombres de carreras almacenados en la base de datos
      System.out.println(«Se ejecutó método obtenerListadoCarreras que implementa la consulta inciso 2.»);
      return listado_carreras;
      }
      //OK
      public Vector obtenerListaParalelos() throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de códgidos de paralelos resultante de la consulta SQL a la base de datos.
      Vector lista_paralelos = new Vector();

      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select p.nombre as PARALELOS from paralelos p»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      //6.1. Obtener el valor de columna de la fila actual del objeto ResultSet
      String valorColumna = tabla.getString(«PARALELOS»);
      //6.2. Almacenar en el vector creado en el paso 2. el valor de columna de la fila actual del objeto ResultSet
      lista_paralelos.add(valorColumna);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
      return lista_paralelos;
      }
      //Inciso 3
      public Vector obtenerListaParalelosCarrera(String p_nombre_carrera) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear el vector para almacenar la lista de nombres de paralelos resultante de la consulta SQL a la base de datos.
      Vector lista_paralelos = new Vector();
      //complete la lógica del bloque de código que resuelve:
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » p.nombre as PARALELOS\n» +
      » from\n» +
      » paralelos p\n» +
      » join \n» +
      » carreras c on(p.cod_carrera = c.cod_carrera)\n» +
      » where\n» +
      » c.nombre = ‘» + p_nombre_carrera + «‘»;
      //5. Ejecutar la consulta y almacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String nombre_paralelo = tabla.getString(«PARALELOS»);
      lista_paralelos.add(nombre_paralelo);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar el objeto vector con la lista de códigos de paralelos almacenados en la base de datos
      System.out.println(«Se ejecutó método obtenerListaParalelosCarrera que implementa la consulta inciso 3.»);
      return lista_paralelos;
      }
      //Inciso 4
      public ArrayList<Vector> obtenerEstudInscritosPorCarrera(String p_nombre_carrera) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear la matriz de datos para almacenar la consulta SQL, cada fila es un Vector de String
      ArrayList<Vector> matriz_datos = new ArrayList();
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » e.cedula as CEDULA_EST,\n» +
      » e.nombres as NOMBRE_EST,\n» +
      » e.apellidos as APELLIDOS_EST\n» +
      » from \n» +
      » inscripciones_estudiantes i\n» +
      » join \n» +
      » estudiantes e on (i.cedula = e.cedula)\n» +
      » join \n» +
      » carreras c on(i.cod_carrera = c.cod_carrera)\n» +
      » where\n» +
      » c.nombre = ‘» + p_nombre_carrera + «‘»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String cedula, nombre, apellidos;
      cedula = tabla.getString(«CEDULA_EST»);
      nombre = tabla.getString(«NOMBRE_EST»);
      apellidos = tabla.getString(«APELLIDOS_EST»);
      Vector datos_estudiante = new Vector();
      datos_estudiante.add(cedula);
      datos_estudiante.add(nombre);
      datos_estudiante.add(apellidos);
      matriz_datos.add(datos_estudiante);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar la matriz de datos con los resultados de la consulta SQL.
      System.out.println(«Se ejecutó método obtenerEstudInscritosPorCarrera que implementa la consulta inciso 4.»);
      return matriz_datos;
      }
      //Inciso 5
      public ArrayList<Vector> obtenerEstudInscritosPorParalelo(String p_nombre_paralelo) throws SQLException
      {
      //1. Conectar a la base de datos
      this.iniciarConexionBD();
      //2. Crear la matriz de datos para almacenar la consulta SQL, cada fila es un Vector de String
      ArrayList<Vector> matriz_datos = new ArrayList<Vector>();
      //3. definir espacio de trabajo para la declaración y ejecución de la consulta sql
      Statement stm = this.conexion.createStatement();
      //4. Definir el texto String de la consulta SQL.
      String sql = «select\n» +
      » e.cedula as CEDULA_EST,\n» +
      » e.nombres as NOMBRE_EST,\n» +
      » e.apellidos as APELLIDOS_EST\n» +
      » from\n» +
      » inscripciones_estudiantes i\n» +
      » join \n» +
      » estudiantes e on(i.cedula = e.cedula)\n» +
      » join \n» +
      » paralelos p on(p.cod_paralelo = i.cod_paralelo)\n» +
      » where\n» +
      » p.nombre = ‘» + p_nombre_paralelo + «‘»;
      //5. Ejecutar la consulta y amacenar en el objeto ResultSet
      ResultSet tabla = stm.executeQuery(sql);
      //6. Recorrer el objeto ResultSet mediante un while y para cada iteración resolver:
      while(tabla.next())
      {
      String cedula, nombre, apellidos;
      cedula = tabla.getString(«CEDULA_EST»);
      nombre = tabla.getString(«NOMBRE_EST»);
      apellidos = tabla.getString(«APELLIDOS_EST»);
      Vector datos_estudiante = new Vector();
      datos_estudiante.add(cedula);
      datos_estudiante.add(nombre);
      datos_estudiante.add(apellidos);
      matriz_datos.add(datos_estudiante);
      }
      //7. Cerrar la conexion a la base de datos
      this.cerrarConexionBD();
      //8. Retornar la matriz de datos con los resultados de la consulta SQL.
      System.out.println(«Se ejecutó método obtenerEstudInscritosPorParalelo que implementa la consulta inciso 5.»);
      return matriz_datos;
      }

      }

      CONSULTAS
      1. El total de carreras que oferta el ITB.
      select
      count(*) as Total_Carreras
      from carreras

      _________________________________

      2. El listado con los nombres de cada carrera que oferta el ITB
      select
      nombre as nombre_carreras
      from
      carreras

      _________________________________

      –3. El listado de paralelos con sus respectivos nombres de paralalos a filtrar por nombre de carreras.
      –Tecnica JOIN
      select
      p.nombre as PARALELOS
      from
      paralelos p
      join
      carreras c on(p.cod_carrera = c.cod_carrera)
      where c.nombre = ‘&CARRERA’

      _________________________________
      –4. El listado de estudiantes (cédula, nombres y apellidos)
      –inscritos a filtrar por carreras.
      select
      e.cedula as CEDULA_EST,
      e.nombres as NOMBRES_EST,
      e.apellidos as APELLIDOS_EST
      from
      inscripciones_estudiantes i
      join
      estudiantes e on(i.cedula = e.cedula)
      join
      carreras c on(i.cod_carrera = c.cod_carrera)
      where c.nombre = ‘&nombre_carrera’

      _________________________________
      5. El listado de estudiantes (cédula, nombres y apellidos) inscritos a filtrar por nombre de paralelos.
      select
      e.cedula as CEDULA_EST,
      e.nombres as NOMBRES_EST,
      e.apellidos as APELLIDOS_EST
      from
      inscripciones_estudiantes i
      join
      estudiantes e on(i.cedula = e.cedula)
      join
      paralelos p on(i.cod_paralelo = p.cod_paralelo)
      where p.nombre = ‘&nombre_paralelo’

  9. Buenas tardes,

    Estoy realizando un ejercicio y me encuentro con un problema. Quiero recorrer un ArrayList y, objeto a objeto, realizar una serie de comparaciones. Dependiendo el resultado de dichas cribas, colocar cada objeto que voy leyendo en una posición específica de un nuevo ArrayList.
    El problema que me está dando es que no me permite hacerlo si no es en posiciones ascendentes. Es decir, desde el index 0 hacia arriba. Pero no en index al azar.

    Espero haberme explicado.

    Muchas gracias

    1. Buenas Julio.
      ArrayList va generando el index a medida que tiene elementos en su interior. Puedes utilizar la función add(index, elemento) para añadir un elemento en cierta posición del índice; es decir, si tienes un arraylist con diez elementos dentro y quieres añadir uno en la posición quinta podrías hacer: add(4, «nuevo elemento»).

  10. Saludos y gracias por tu tiempo.
    Necesito ayuda con su ejercicio de eliminar los 0. En esta parte del código, que es para mostrar los datos del List:
    System.out.println(«n… Contenido de los ArrayList del ArrayList …»);
    «»»»Iterator<ArrayList>»»»» itrArrayListNumeros = arrayListNumeros.iterator();
    while(itrArrayListNumeros.hasNext()){
    ArrayList numeros = «»»»itrArrayListNumeros.next();»»»»
    Iterator itrNumeros = numeros.iterator();
    while(itrNumeros.hasNext()){
    int numero = itrNumeros.next();
    System.out.print(numero+» «);
    }
    System.out.println();
    }

    Lo que pongo entre comillas me da Error.
    Si cambio «»»»Iterator<ArrayList>»»»» itrArrayListNumeros = arrayListNumeros.iterator();
    por
    Iterator itrArrayListNumeros = arraylistNumeros.iterator(); me lo da como bueno, salvo:

    ArrayList numeros = «»»»itrArrayListNumeros.next();»»»» Con el mensaje «Type mismatch: cannot convert from Integer to ArrayList»

    No entiendo que puede pasar.
    Gracias de nuevo

    1. next() te devuelve el siguiente valor del iterador, como es un iterador de números como podría ser {2,4,5,6,7} (aquí represento un iterador, no un listado, cada número es generado por el iterador) al usar next() te devuelve el siguiente valor que genera que es 2 que es un Integer.

      1. hola me podrias ayudar con este programa:
        La aplicación debe permitir registrar los datos de alumnos y registrar sus calificaciones.
        Confeccione el diagrama de clases con sus relaciones.
        Los datos necesarios para registrar un alumno son:
         Nombre
         Apellido
         Dni
         Fecha nacimiento
        Los datos necesarios para las calificaciones son:
         Orden (valor numérico entero que representa el ordenamiento de las notas Ej: 1,2,3,… o
        10,20,30,…)
         Nota (valores decimales comprendidos entre 1 y 10)
         Fecha nota (fecha en la que se registra la nota, no pueden registrarse 2 notas con la misma
        fecha)
        2.- Confeccionar un menú de opciones donde se permita:
        – Dar de alta un alumno.
        – Realizar la búsqueda de un alumno para asignarle sus notas.
        – Buscar un alumno ingresando su dni y mostrar el promedio de notas y la nota más alta (valor máximo).
        – Mostrar la lista de alumnos con sus respectivas notas.

        1. Buenas Brenda. Para lo que necesitas, a nivel de estructura de datos, podrías hacer un ArrayList de objetos con los datos que necesitas. Para ingresar estos valores, depende de como lo quieras hacer (app de escritorio, si es en web, por consola, etc.).

  11. Me gustaría saber como puedo crear mi lista para un bot de discord, soy principiante en esto, si podrían ayudarme 🙁

    1. Hola José.
      Discord tienes su propia API en https://discordapp.com/developers/docs/intro que es donde encontrarás toda la información al respecto. No tenemos tutoriales de bots de Discord de momento, creo que puede serte interesante el siguiente web que explica paso a paso como realizar el bot https://www.toptal.com/chatbot/how-to-make-a-discord-bot. Aunque no es difícil, para programarlo necesitas tiempo y si estás empezando a programar puede que sea mucha información junta, por lo que te recomiendo aprender a programar JavaScript o Python (que principalmente es lo que utiliza Discord). En esta web encontrarás artículos de Python (https://jarroba.com/page/1/?s=python) y para entender lo que necesitas de comunicación cliente-servidor con el inicio de web que incluye JavaScript (https://jarroba.com/usar-servidores-y-crear-una-web/)

    1. Siempre que necesites una estructura de datos ordenada en la que se puedan repetir elementos (es decir, cuando necesites una lista como la que se escribe en un papel, como la lista de la compra).
      Ejemplos:
      -Listas como: «uno», «dos», «uno», «tres»
      -Listas para pintar gráficas de datos (puedes emplear listados multidimensionales, es decir, matrices, lo que son listados de listados).
      -Lista de objetos complejos, por ejemplo entidades de bases de datos o para pintar en una interfaz gráfica un listado visual.

  12. hola por ejemplo si se tiene que realizar un un programa en la cual se tenga que crear un sistema de registro como un menu en el cual se pueda borrar,actualizar,,buscar e imprimir los datos de una tienda de abarrotes utilizando un switch y dentro de el como se le agregarían los objetos por medio de arreglos, por ejemplo si se hace otra clse y en el se agragan los atributos la clase principal como podria ser

    1. Hola Veronica.
      Creo que te podría ser útil un ArrayList de objetos o mejor un HashMap de objetos (más información y ejemplos en ) para que cada objeto tenga toda la información que necesites y puedas obtener borrar, actualizar o buscar los datos.

  13. me hace falta hacer un programa q sea un torneo de futbol de 4 equipos con partido de ida y vuelta con botones q genere botones registro finales de ligas anteriores generacion de reportes con botones me seria de gran ayuda

    1. Para eso necesitas una interfaz de usuario, puedes utilizar la biblioteca javax.swing (tienes toda la información en y ejemplos en ).

  14. tengo un problema cree un metodo que recibe como parametro un objeto y despues ese objeto(Contacto) lo guardo en un ArrayList del tipo Objeto(Contacto) y cada q mando un objeto en ves de añadirlo a una lista me lo cambia podrian ayudarme 🙁

    public void aniadirContacto(Contacto c){
    lista = new ArrayList();
    lista.add(c);
    }

    1. Hola Pablo. Al iniciar a vacío el ArrayList (con «new ArrayList()») en el mismo método de aniadriContacto() en el que añades el contacto con add() se está eliminando lo anterior y guardando el último. Sugiero sacar el «new ArrayList()» fuera del método para que no reinicie al ArrayList.

  15. Hola, tengo un duda con los arrayList:
    Tengo una clase Vehículo, y de ella se desprende dos hijos, uno Moto y otro Auto. Necesito hacer una lista de Vehiculos en general, motos, autos, etc. Paso las clases que use:

    public class Vehiculo {
    // ATRIBUTOS
    private double precio;
    private String marca;
    private String modelo;

    // METODOS
    // Constructor
    public Vehiculo (String marca,String modelo,double precio){
    this.precio=precio;
    this.marca=marca;
    this.modelo=modelo;
    }
    // getters
    public double getPrecio() {
    return precio;
    }

    public String getMarca() {
    return marca;
    }

    public String getModelo() {
    return modelo;
    }

    // setters
    public void setPrecio (int precio) {
    this.precio=precio;
    }

    public void setMarca (String marca) {
    this.marca=marca;
    }

    public void setModelo (String modelo) {
    this.modelo=modelo;
    }

    }

    Luego tengo la clase Motos:

    public class Moto extends Vehiculo{
    // Atributos
    private int cilindrada;

    // METODOS
    // Constructor – sub class constructor-using super()
    public Moto (String marca,String modelo,int cilindrada,int precio){
    super(marca,modelo,precio); //constructor of the father class
    this.cilindrada=cilindrada;
    }
    // getters
    public int getCilindrada() {
    return cilindrada;
    }
    // setters
    public void setCilindrada (int cilindrada) {
    this.cilindrada=cilindrada;
    }
    }

    Luego tengo la clase Auto

    public class Auto extends Vehiculo{
    // Atributos
    private int puertas;
    // METODOS
    // Constructor – sub class constructor-using super()
    public Auto (String marca,String modelo,int puertas,int precio){
    super(marca,modelo,precio); //constructor of the father class
    this.puertas=puertas;
    }
    // getters
    public int getPuertas() {
    return puertas;
    }
    // setters
    public void setPuertas (int puertas) {
    this.puertas=puertas;
    }
    }

    Luego en el main creo los objetos de clases moto y auto,

    Auto auto1 = new Auto(«Peugeot»,»206″,4,200000);
    Moto moto1 = new Moto(«Honda»,»Titan»,125,60000);

    y luego los agrego al arraylist,

    ArrayList arrayList = new ArrayList();
    arrayList.add(auto1);
    arrayList.add(moto1);

    Hasta ahí todo perfecto. El tema es que al querer acceder a un método getter especifico de clase Moto o de Auto, no me deja.
    ¿Como puedo acceder? por ejemplo no me deja hacer:

    System.out.println(arrayList.get(1).getCilindrada() );

    pero si me deja acceder a get o set de la clase padre Vehiculo

    System.out.println(arrayList.get(1).getPrecio() );

    Desde ya muchas gracias. Saluos

  16. cuando escribí el código por mi mismo, el try no me funcionaba no entiendo porque, si tenia el catch y el finally pero aun asi me decia que faltaban

    1. Por lo que comentas, podría ser la falta de algún paréntesis. Si nos pones el cacho código te puedo ayudar mejor.

  17. Hola, súper bien explicado el tema.
    Ahora, tengo una duda, necesito crear una lista que represente 8 carpetas de directorios, y dentro de esos directorios según una entrada de usuario se crean mas directorios o archivos dentro y así sucesivamente hasta que un contador de memoria llegue a 0. Cuál me recomiendan que sería la mejor opción?

    1. Podrías hacer listados de listados para representar carpetas y subcarpetas. Algo así:

      List<List> carpetas = new ArrayList<List>();
      // Puedes crear más subcarpetas dentro de las subcarpetas o ya strings como carpetas finales:
      List<List> subcarpetas = new ArrayList<List>();
      // Añadir subcarpetas
      // Al final añades las subcarpetas a las carpetas
      carpetas.add(subcarpetas);

  18. Buenas noches, tengo una duda, para poder hacer que un arraylist me vaya generando nombres aleatorios ¿cómo se hace?, ¿hay alguna función para eso? o cómo lo harías tú. Gracias.

    1. Para generar nombres aleatorios podrías poner varios nombres en un listado y elegirlos de manera aleatoria. Por ejemplo:
      List<String> miListadoDeNombres = Arrays.asList("Juan", "Pepe", "Paco");
      Random aleatorio = new Random();
      String miNombreAleatorio = list.get(aleatorio.nextInt(list.size()));

  19. buenas tardes a ver si alguien me puede dar una mano. recien me inicio en la programacion , tengo que hacer un ejercicio que dice que tengo una matriz con 0 y 1 , los numero 1 estan de tal forma que forman un circulo , dentro de ese circulo de 1 hay todos ceros , me piden cambiar esos ceros que por 1s , alguien tiene una idea de como seria el metodo? gracias

    1. No te puedo dar la solución completa al ejercicio, pero te puedo dar una pista: podrías recorrer posición a posición la matriz, como es una matriz tendrías que utilizar dos fors anidados e ir cambiando los 0s por 1s.

  20. BUEN DIA,
    TENGO UN PROBLEMA CON MI CODIGO , EL PROBLEMAS ES QUE CUANDO INGRESO UN NUEVO PARTICIPANTE LO QUE HACE EL PROFGRAMA ES PONER TODOS LOS DATOS EN LA MISMA POSICION DEL ANTIGUO.
    //ESE ES EL METODO REGISTRAR PARTICIPANTE
    public static void REGISTRODEPARTICIPANTE(){
    String DNI;
    int pos;
    int con;
    con = 1;
    oParticipante = new Participante();
    System.out.println(«**REGISTRAR PARTICIPANTE**»);
    System.out.println(«PARTICIPANTE Nº » + (listaParticipante.size()+1));
    System.out.print(«DNI: «);
    DNI= leer.next();
    pos = BuscarxDNI(DNI);
    if(pos > -1){
    System.out.println(«ERROR;ESTE DNI YA ESTA REGISTRADO»);
    System.out.println(«INGRESE NUEVO DNI:»);
    DNI=leer.next();
    oParticipante.setDNI(DNI);
    }
    oParticipante.setDNI(DNI);
    System.out.print(«NOMBRE: «);
    oParticipante.setNOMBRE(leer.next());
    System.out.print(«APELLIDO: «);
    oParticipante.setAPELLIDO(leer.next());
    System.out.print(«SEXO (1.MASCULINO/2.FEMENINO): «);
    if(leer.nextInt() == 1){
    oParticipante.setSEXO(«M»);
    } else{
    oParticipante.setSEXO(«F»);
    }
    listaParticipante.add(oParticipante);
    }

    1. Por el código que me muestras no veo nada raro, pues haces el listaParticipante.add(oParticipante) al final y se debería añadir al listado. Comprueba que no se esté iniciando la lista listaParticipante múltiples veces.

  21. Buenas tardes,

    Primero de todo enhorabuena por el artículo. Me surge una duda, aunque creo que es problema de concepto. Cuando eliminamos un elemento:

    nombreIterator = nombreArrayList.iterator();
    while(nombreIterator.hasNext()){
    String elemento = nombreIterator.next();
    if(elemento.equals(«Elemento 3»))
    nombreIterator.remove(); // Eliminamos el Elemento que hemos obtenido del Iterator
    }

    ¿Por qué el elemento se borra de la lista? Al final el remove lo haces sobre el iterator. Estoy empezando con java y me ha chocado esto, igual estoy acostumbrado a otros lenguajes donde creo que no funcionaría así, ya que el concepto de iterator acabo de descubrirlo.

    Muchas gracias 🙂

    1. Simplemente por hacer un ejemplo sencillo de eliminar un elemento (en este ejemplo: eliminar un elemento repetido que es exactamente Elemento 3″).
      Por otro lado, conocer los iteradores es bastante importante para todos los lenguajes de programación y creo que es algo que debería de conocerse desde el principio. En resumen un iterador es aquello que se puede recorrer como listados, diccionarios (Maps) o ficheros (usos de iteradores en

    2. https://jarroba.com/streaming-generadores-buffer-y-cache/
    3. ).

      Otros lenguajes que usan iteradores, es por ejemplo Python, que se crean directamente en un método al devolver los datos con la palabra reservada «yield» en vez de con el típico «return».

  22. Buenas, a que te refieres con el fichero donde estan los datos? y ? La ruta donde esta un archivo .txt puede ser esa extenseion u otra con los datos?, Muchas Gracias.

    1. Sí, es el fichero con los datos (la variable nombreFichero es una ruta al fichero, por ejemplo: «C:/usuario/Desktop/mi_fichero.extension»). La extensión es indiferente (que sea .txt no implica que los datos sean textos legibles, la extensión simplemente es para que los programas como Word o Documento de texto sepan como tienen que abrir ese archivo; si a una imagen .png le cambias la extensión a .txt y lo intentas abrir con Documento de texto por ejemplo, este programa interpretará lo de dentro como texto, y sin saber que te está mostrando, tu verás letras sin sentido). Si guardas los datos con formato binario, por ejemplo, este fichero será ilegible para un humano, pero legible para una máquina (que sepa leerlo).

  23. Hola, la explicación ha sido excelente, me gustaria saber como puedo ponerle un OnCLickListener al segundo elemento de este arryList
    ArrayList listalugares. Perdón si la pregunta es un poco tonta

  24. Hola. Tengo una duda, en la introducción se menciona que NO ES NECESARIO definir el tamaño de un ArrayList, eso me da a entender que si uno quisiera definir un tamaño se podría, ¿esto es así?, ¿puedo definir el tamaño de un ArrayList?, si es así ¿Cómo hacerlo?

    1. Puedes poner un máximo de elementos a un ArrayList. Por ejemplo, para indicar que como máximo tenga 10 elementos:

      new ArrayList<Integer>(10)

  25. como podria Agregar objetos asi lista2.add(new Personas(«Juan», 215948393, «juan@gmail.com»)); pero no de uno por uno, sino indeterminadas veces por ejemplo en un for, pero me da error. Ayudaa :c

    1. De ese modo puedes añadir indefinido objetos Persona a un ArrayList ¿Qué error te sale? Asegurate que el ArrayList lo hayas declarado así:

      ArrayList<Persona> nombreArrayList = new ArrayList<Persona>();

  26. public static void main(String[] args) {

    float pro = 0;
    double sum = 0;
    int aluentre = 0;

    //Crear 10 personas
    Alumnos p1 = new Alumnos(17203630, «Ana», 20, «ana20@gmail.com»);
    Alumnos p2 = new Alumnos(17203631, «Jose», 15, «jose15@gmail.com»);
    Alumnos p3 = new Alumnos(17203632, «Frank», 22, «frank22@hotmail.com»);
    Alumnos p4 = new Alumnos(17203633, «Carlos», 20, «carlos20@hotmail.com»);
    Alumnos p5 = new Alumnos(17203634, «Maria», 18, «maria18@hotmail.com»);
    Alumnos p6 = new Alumnos(17203635, «Samuel», 20, «samuel20@hotmail.com»);
    Alumnos p7 = new Alumnos(17203636, «Sara», 21, «sara21@gmail.com»);
    Alumnos p8 = new Alumnos(17203637, «Nicol», 20, «nicol20@gmail.com»);
    Alumnos p9 = new Alumnos(17203638, «Marcos», 22, «marcos22@gmail.com»);
    Alumnos p10 = new Alumnos(17203639, «Anabel», 10, «anabel10@hotmail.com»);

    //Crear una lista de personas
    List lista = new ArrayList();
    lista.add(p1);
    lista.add(p2);
    lista.add(p3);
    lista.add(p4);
    lista.add(p5);
    lista.add(p6);
    lista.add(p7);
    lista.add(p8);
    lista.add(p9);
    lista.add(p10);

    Mostrar los alumnos cuyo nombre tenga 3 caracteres
    Mostrar los alumnos cuyo correo sea de Hotmail

    ayuda porfa

    1. Si recorres el listado y buscas lo que necesitas te debería valer (por cierto «Alumno» mejor que «Alumnos», el objeto solo guarda la información de un único alumno; el listado sí que puedes ponerlo en plural como «Alumnos», ya que es un grupo de objetos de tipo «Alumno»). Algo como (siguiendo los nombre que has puesto en el ejemplo):

      for (Alumnos alumno: lista) {
      String nombreAlumno = alumno.getNombre();
      int cantCaracteresNombre = nombreAlumno.length();
      if (cantCaracteresNombre == 3) {
      System.out.println("Tiene 3 caracteres el nombre: " + nombreAlumno );
      }

      String email = alumno.getEmail();
      if (email.contains("@hotmail.com")) {
      System.out.println("El siguiente email es Hotmail: " + email);
      }
      }

  27. Hola, muy bien explicado. Muchas gracias

    Te quería preguntar algo que me trae en duda. ¿Por qué no mencionas el método .set?

    Estaba buscando como reemplazar un elemento existente en el Array List y sin querer encontré ese método. Que es lo mismo que .remove(i) seguido de .add(i).

    En Android me permitió usarlo pero no sé por qué no lo veo explicado en tu apartado, será que esté usando algo fuera de lo común en ArrayList de Java por defecto?

    Saludos.

  28. Necesito una ayuda. Tengo un ArrayList y necesito acceder al registro X del Array contenido en el registro Y del ArrayList. Como puedo hacerlo?

    1. Puedes obtener el valor del Array y acceder a la posición que estaba guardando el ArrayList. Por ejemplo:

      int[] arrayDePosiciones = {4, 8, 9, 11, 12};
      posicion_del_array = 2; // Posición del array de ejemplo
      posicion_arraylist = arrayDePosiciones[posicion_del_array];
      ArrayList miArrayList = new ArrayList();
      String valorArrayList = miArrayList.get(posicion_arraylist);

  29. hola buenas, me podrias ayudar con una práctica que tengo que hacer y no se como hacerla muy bien, es sobre una lista de objetos sensores con el arraylist y tengo que `poder añadir, eliminar , consultar y una clase pedido y añadir un teclado…
    muchas gracias

  30. Como puedo hacer que un ArrayList junto con el iterador me muestre los valores previamente entablecidos del ultimo al primero?

  31. Hola, tengo una duda

    Este es el enunciado: Define un nuevo constructor para dar valor a estos nuevos atributos: BadConsequence(String text, int levels, ArrayList<TreasureKind> tVisible, ArrayList<TreasureKind> tHidden) 

    tengo creado un arraylist , ¿como puedo igualar mi arraylist al que paso como argumento en el constructor? 

    ¿ es esta una solucion valida?— miarraylist=tVisible

    1. Si igualas variables de tipo ArrayList (como en tu ejemplo: miarraylist=tVisible ) se apunta al mismo ArrayList en memoria, por lo que si modificas «miarraylist» y luego lees con «tVisible», verías al modificación.

      Para crear una copia de ArrayList tan solo tienes que hacer un nuevo ArrayList y pasar el anterior, como por ejemplo:

      List viejoArrayList = new ArrayList();

      List ArrayListCopiadoDelViejo = new ArrayList<>(viejoArrayList);

  32. Hola, estoy haciendo un programa para simular un juego de pirinola.

    Para simular una partida debo "girar la pirinola" segun cada jugador, los cuales estan en un arrayList, cada jugador tiene un int puntos y un String identificador, hasta que el puntaje de alguno de los jugadores sea 0. Para resolver dicho problema tengo pensado hacer un while(mientras la puntuacion de algun jugador no sea <=0) y un for (repetir el ciclo segun el numero de jugadores). Aun no se manipular muy bien los ArrayList, podrías decirme como obtengo cada int del array para poder utilizarlo en el while, por favor.

    De antemano gracias.

    1. Puedes añadir elementos a un ArrayList con el método add(), por ejemplo:

      nombreArrayList.add(«Elemento»);

      Y para obtener el elemenot en la posición 2:

      nombreArrayList.get(2);

  33. saludos desde Colombia. quisiera que por favor me colaboraran con esta duda. del siguiente código java necesito sacar del bucle For la línea que dice:  personal.setTotal(actualizaHorizontal).   

        public void changeMujeres(ValueChangeEvent vce) {
            long value = vce.getNewValue() != null ? (Long)vce.getNewValue() : 0;
            Long actualizaHorizontal;
            for (PersonalOcupadoDTO personal : personalOcupado) {
                actualizaHorizontal = value + personal.getHombres();
                personal.setTotal(actualizaHorizontal);
            }          
        }

     

    es decir, dejarlo de esta forma

        public void changeMujeres(ValueChangeEvent vce) {
            long value = vce.getNewValue() != null ? (Long)vce.getNewValue() : 0;
            Long actualizaHorizontal;
            for (PersonalOcupadoDTO personal : personalOcupado) {
                actualizaHorizontal = value + personal.getHombres();
            }          
            personal.setTotal(actualizaHorizontal);        
        }

     

    el asunto es que como dentro del ciclo For defino y uso el DTO, al intentar usar por fuera la variable "personal" me genera un error que dice que "no encuentra esa variable".  Como puedo reorganizar y definir ese DTO por fuera del For.   Gracias

     

     

    1. El método setTotal() pertenece al objeto personal, el que está dentro del for pertenece al alcance (scope) del for, y por tanto no le llega fuera de este for. Tendrás que definir fuera también, por ejemplo:

       

          public void changeMujeres(ValueChangeEvent vce) {

              PersonalOcupadoDTO personal = … //Tienes que definir el objeto fuera del alcance (scope) del for

              long value = vce.getNewValue() != null ? (Long)vce.getNewValue() : 0;
              Long actualizaHorizontal;
              for (PersonalOcupadoDTO personal : personalOcupado) { //Este objeto solo está dentro del alcance del for
                  actualizaHorizontal = value + personal.getHombres();
              }          

              personal.setTotal(actualizaHorizontal); //Esta llamada está fuera del alcance del for
              
          }

  34. muy bueno su post pero tengo una pregunta 

    tengo una clase libro asi 

    public class Libro extends Publicacion {
      private int Numero_Paginas;
      private int Año_Publicacion;

      public Libro()
      {
            super("",0);
            Numero_Paginas = 0;
        Año_Publicacion = 0;
      }

      public Libro(String T, double P, int np, int ap)
      {
            super(T,P);
        Numero_Paginas = np;
        Año_Publicacion = ap;
      }

      public int Obtener_Np()
      {
        return Numero_Paginas;
      }

      public int Obtener_Ap()
      {
            return Año_Publicacion;
      }

      public void establecerNumPag(int Np)
      {
            Numero_Paginas = Np;
      }

      public void establecerAñoPub(int Ap)
      {
            Año_Publicacion = Ap;
      }
    }

     

    y necesito ir agregando cada objeto que sea creado a un arraylist como lo haria???, es decir tendria un arraylist de varios libros

    y despues de eso en otra clase tengo que ir mostrando(listar) los libros que sean del año de publicacion ingresado por el usuario por teclado 

     

    agradeceria mucho su ayuda gracias 🙂

    1. Solo tienes que decir que el ArrayList es de tipo libro. Por ejemplo:

      ArrayList<Libro> libros = new ArrayList<Libro>();

      Y para añadir un objeto de tipo libro:

      Libro libro = new Libro(…);

      libros.add(libro);

  35. Hola, tengo una duda, tengo que hacer un crucigrama en NetBeans con GUI, el problema es que se me dificulta dominar los Array, los Arraylist y de como en ocasiones hacer un GUI; tengo una clase llamada palabras, donde contiene las palabras del crucigrama, que es el que se muestra a continuacion:

    public class Palabras {
        
        private String hor_1="Electronegatividad";
        private String hor_2="Electronica";
        private String hor_3="Halogenos";
        private String ver_1="Fluor";
        private String ver_2="Helio";
        private String ver_3="Alcalinos";

        public Palabras() {  
            
        }

        public String getHor_1() {
            return hor_1;
        }

        public void setHor_1(String hor_1) {
            this.hor_1 = hor_1;
        }

        public String getHor_2() {
            return hor_2;
        }

        public void setHor_2(String hor_2) {
            this.hor_2 = hor_2;
        }

        public String getHor_3() {
            return hor_3;
        }

        public void setHor_3(String hor_3) {
            this.hor_3 = hor_3;
        }

        public String getVer_1() {
            return ver_1;
        }

        public void setVer_1(String ver_1) {
            this.ver_1 = ver_1;
        }

        public String getVer_2() {
            return ver_2;
        }

        public void setVer_2(String ver_2) {
            this.ver_2 = ver_2;
        }

        public String getVer_3() {
            return ver_3;
        }

        public void setVer_3(String ver_3) {
            this.ver_3 = ver_3;
        }
        
        
        
    }

     

    Aqui todo bien, el problema es en el siguiente codigo, debido a que no se si estoy haciendo lo correcto:

    import java.util.ArrayList;
    import javax.swing.*;
    import static javax.swing.JFrame.*;

    public class Ventana extends Palabras{
        
        ArrayList <Palabras> lines=new ArrayList();
        
        JFrame frm_quimic=new JFrame();
        JLabel lbl_ver,lbl_hor,lbl_title;
        JButton btn_clean,btn_close,btn_accept;
        JTextField txt_hor1,txt_hor2,txt_hor3,txt_ver1,txt_ver2,txt_ver3;
        
        public Ventana(){    
            
            frm_quimic.setBounds(200,100,1000,500);
            frm_quimic.setVisible(true);
            frm_quimic.setLayout(null);
            frm_quimic.setDefaultCloseOperation(EXIT_ON_CLOSE);
            frm_quimic.setTitle("Química");
            inicio(); 
       
        }
        
        void inicio(){
            
            
            String h1=hor_1;
            String h1_1;
            
            for (int i = 0; i!=h1.length(); i++) {
                
                Palabras h_1=new Palabras ();
                txt_hor1=new JTextField();
                txt_hor1.setBounds(i*20, 0, 20, 20);
                h_1.h1_1=h1.charAt(i)+"";
                lines.add(h_1);
                
            }
            
            for(Palabras h_1 : lines){
                panel.add(h_1.txt_hor1);
            }
            btn_accept = new JButton("Aceptar");
            btn_accept.setBounds(100, 100, 100, 100);
            panel.add(btn_accept);

    //por el momento el boton no tiene definido ninguna accion
            
        
        }
        
    }

    En void inicio es en donde quiero agregar los textfields para las palabras, pero me marca error en esta parte del codigo, que son los comandos en negrita : 

    void inicio(){
            
            
            String h1=hor_1;
            String h1_1;
            
            for (int i = 0; i!=h1.length(); i++) {
                
                Palabras h_1=new Palabras ();
                txt_hor1=new JTextField();
                txt_hor1.setBounds(i*20, 0, 20, 20);
                h_1.h1_1=h1.charAt(i)+"";
                lines.add(h_1);
                
            }
            
            for(Palabras h_1 : lines){
                panel.add(h_1.txt_hor1);
            }
            btn_accept = new JButton("Aceptar");
            btn_accept.setBounds(100, 100, 100, 100);
            panel.add(btn_accept);
            
        
        }

    Y pues repito, en ocasiones se me dificulta un poco lo del GUI, y aparte los Array y los ArrayList, si me pudieran ayudar seria bueno, gracias por su ayuda. 

    1. Perdonen de nuevo, estoy mal en la parte del codigo ventana, no aparece el Jpanel, aqui les dejo el que estoy trabajando(el que aparecio en mi anterior comentario es una version antes):

      public class Ventana extends Palabras{
          
          ArrayList <Palabras> lines=new ArrayList();
          
          JFrame frm_quimic=new JFrame();
          JLabel lbl_ver,lbl_hor,lbl_title;
          JButton btn_clean,btn_close,btn_accept;
          JTextField txt_hor1,txt_hor2,txt_hor3,txt_ver1,txt_ver2,txt_ver3;
          JPanel panel=new JPanel();
          
          public Ventana(){    
              
              frm_quimic.setBounds(200,100,1000,500);
              frm_quimic.setVisible(true);
              frm_quimic.setLayout(null);
              frm_quimic.setDefaultCloseOperation(EXIT_ON_CLOSE);
              frm_quimic.setTitle("Química");
              frm_quimic.add(panel);
              inicio(); 
         
          }
          
          void inicio(){
              
              
              String h1=hor_1;
              String h1_1;
              
              for (int i = 0; i!=h1.length(); i++) {
                  
                  Palabras h_1=new Palabras ();
                  txt_hor1=new JTextField();
                  txt_hor1.setBounds(i*20, 0, 20, 20);
                  h_1.h1_1=h1.charAt(i)+"";
                  lines.add(h_1);
                  
              }
              
              for(Palabras h_1 : lines){
                  panel.add(h_1.txt_hor1);
              }
              btn_accept = new JButton("Aceptar");
              btn_accept.setBounds(100, 100, 100, 100);
              panel.add(btn_accept);
              
          
              }
          
      }

  36. Te puedo hacer una pregunta? Realmente agradeceria mucho sinceramente que me respondas lo antes posible porque este problema no me sale y necesito entregarlo dentro de un par de horas, me ayudarias mucho sinceramente. 

    Tengo un ArrayList<ICentral> central;  

    que como podes ver tiene una interfaz (ICentral) que almacena objetos "Casas" y "Fabricas".

    En la clase principal cree los objetos :

            cc.agregar(new Casa());
            
            cc.agregar(new Fabrica());
            
            cc.agregar(new Casa());
            
            cc.agregar(new Fabrica());

    Ahora lo que me pide el ejercicio es contar la cantidad de objetos iguales.Yo tendria que hacer un metodo : 

    public void contarCentrales(){

    //Numero de elementos totales del ArrayList <central>  
            System.out.println("\n" +  "Nùmero de centrales totales: " + central.size()); //que teoricamente como cree 4, aparece 4 

    for (ICentral iCentral : central) {
                 if(iCentral == new Casa()){ // 
                     contCasa++;

                  System.out.println(contCasa);
                 }

    }

     

    Me podrias decir por favor en que me estoy equivocando? Realmente a esta altura ya intente varias cosas

    1. El problema es que estás utilizando el operador == que compara si dos objetos son el mismo objeto (no sí son objetos parecidos de la misma clase, tiene que ser exacatamente el mismo objeto y tu estás creando un new Casa() que ya es otro objeto diferente). Si quieres comparar por clases, lo que tendrías que hacer sería utilizar instanceof:

      if iCentral instanceof Casa {

      }

  37. Digamos que a este ejemplo, quiera agregarle el campo total goles, como lo agrego en el arraylist?

    Sin crear como parametro totalGoles

    1. Podrías crear un Hash map cuya clave esté referenciada al PartidoFutbol en concreto y cuyo valor sea el total de goles. La otra manera es crear el parámetro en la calse PartidoFutbol (aunque no sea lo deseado).

  38. Excelente Blog. Me salió perfecto cuando lo trabaje con una clase Persona que tenía 5 atributos, cree mis objeto de clase en el while para agregar al ArrayList luego y todo muy bien. Pero mi problema viene cuando quiero trabajar en otra clase, yo cree una clase P1 con sus respectivos atributos 12 en total, pero al momento de cargar un objeto a mi arrayList no lo hace no se a que se deberá. Espero me pueden ayudar con alguna orientación aquí les dejo mi código:

    //P1 es mi clase con los 12 atributos dni,nombre,apellidos,etc…

    ArrayList<P1> listaPacientes=new ArrayList<P1>();
        
        public void cargarDatos(){
            File fichero1=new File("C:\\Users\\James\\Desktop\\datos.txt");
            Scanner s=null;
            try {
                s=new Scanner(fichero1);
                while(s.hasNextLine()){
                    String linea;
                    linea=s.nextLine();
                    System.out.println(linea);
                    String valores[];
                    valores=linea.split("::");                
                    //Instancio la clase P1 para obtener un nuevo objeto P1
                    P1 pacientes=new P1();
                    //Almacenamos en nuestro objeto pacientes mis datos de valores
                    pacientes.setDni(Integer.parseInt(valores[0]));
                    pacientes.setNombre(valores[1]);
                    pacientes.setNombre2(valores[2]);
                    pacientes.setApellidos(valores[3]);
                    pacientes.setApellido2(valores[4]);
                    pacientes.setSexo(valores[5]);
                    pacientes.setEdad(Integer.parseInt(valores[6]));
                    pacientes.setNombre_familiar_cargo(valores[7]);
                    pacientes.setRelacion_paciente_familiar(valores[8]);
                    pacientes.setNumero_cama(Integer.parseInt(valores[9]));
                    pacientes.setNivel_edificio(Integer.parseInt(valores[10]));
                    pacientes.setArea_ubicacion(valores[11]);

                    //Aqui esta mi problema no lo agrega, aparentemento no hay ningin error de programación porque no me sale ninguna alerta
                    listaPacientes.add(pacientes);
                    
                }  
            } catch (Exception e) {            
                //System.out.println("No se cargaron los datos");
            }finally{
                try {
                    if(s!=null){
                        s.close();
                    }
                } catch (Exception e) {
                    //
                }
            }       

    ===============

    despues hice un método para ver el contenido de mi ArrayList y nada no imprime nada porque no lo ordeno, verifique bien la ruta y nada esta correcta no se a que se deberá. Espero su ayuda. Muchas gracias nuevamente por El blog

     

  39. Excelente.

    Soy nueva en esto del ArrayList y me gustaría saber como lo llenaron con los números.

    ¡Saludos!

  40. Excelente página!

    Felicitaciones y muchas gracias por compartir conocimientos de forma clara y con calidad.

    Saludos desde Colombia.

  41. Tengo una duda sobre los arrayList.

    Os pongo en antecedentes.

    Tengo una clase que tiene esto:

    public class Niveles implements Serializable {
    public Integer NivelLanzadorDivino = 0;
    public Integer NivelLanzadorArcano = 0;
    public Integer FormaSalvaje = 0;
    public Integer UsosFormaSalvaje = 0;

    public String Clases = "";
    public String TipoDePH = "";
    public String TipoDeDG = "";

    }

    esta clase es la que voy a ir añadiendo dentro del arrayList que se llama arrayNiveles. cada vez que la añado al arrayList pongo los datos que hay en la clase Niveles.

     

    Bueno mi pregunta es la siguiente como sumo todos los datos. Osea quiero que despues de haber añadido varios niveles tener el resultado de todos ellos en un mismo array o arrayList o lo que sea.

     

    Me podeis ayudar?

    1. El nombre del ArrayList es el nombre de la variable que le pongas cuando lo asignas, como:

      ArrayList miNombreDeMiArrayList = new ArrayList();

  42. Hola!!

    Yo tengo una duda, si pueden ayudarme me harian feliz… 

    Realice mi ArrayList, pero este recibe una clase con 3 atributos String les di valores son los set  y los almaceno en el ArrayList pero quiero que se guarden mas de un registro y me muestre los 3 atributos de cada casilla del Array, pero no se como se realiza.. realice que me mostrara los atributos y si los muestra pero solo del ultimo registro que meti, y los anteriores no los muestra…

  43. buenas, tengo un arraylist con provincias y esas provincias tienen longitudes de localidades y quiero hacer un hash map, de CLAVE la provincia y de VALOR la suma de las longitudes de cada provincia, como podria hacerlo? 

    espero que me podais ayudar, muchas gracias.

        1. No entiendo tu pregunta entonces: si quieres un HashMap donde se guarda una clave que es la provincia y una clave que es la distancia, no vas a tener nunca repetidas varias provincias (HashMap no permite repetir claves); por otro lado, si lo que quieres es modificar un valor simplemente obtenlo, sumale lo que sea y sobrescríbelo.

  44. Buenas amigo, resulta que tengo una lista de numeros 2,3,5,8,9,12,15 quisiera buscar el menor numero faltante por ejemplo
    Lista 2,3,4,6,7,8,9 (Falta el 1 y el 5) el numero menor faltante seria el 1
    Lista 1,2,3,4,6,7,10(Faktab ek 5,8 y 9) el numero menor faltante seria el 5

    como haría para saber cual falta?

    1. Tienes muchas maneras de enfocarlo. Suponiendo que el número menor sea siempre el 1, podrías realizar una ordenación de la lista y luego empezando desde el número más pequeño empezar a buscar por un número que falte. Para ello podrías tener un auxiliar que se incremente en 1 por cada número visitado, compararías el número del auxiliar con el número que estás viendo en ese momento; en caso de diferencia el número actual del auxiliar es el más pequeño 😀

  45. Disculpa tengo un arrayList de objetos pero a la hora de imprimir me manda datos extraños como por ejemplo @72006539 lo estoy llenando de una BD. Tendrían alguna recomendación para solucionar este error.

    1. Lo que te ocurre es que estás imprimiendo objetos tal cual. En Java no existe el vardump como en otros lenguajes (como PHP), así que tendrás que recorrer cada objeto e ir imprimiendo cada texto que quieras imprimir

  46. Buenas, tego un problemilla que me esta comiendo la cabeza

    Lo que quiero agregar a mi ArrayList son objetos que tienen una posicion x,y en pantalla y una imagen/icono cualquiera… pero, o no interprete bien algo, o no se… no logro resolver como agregarlos. Es decir, tengo mi clase (por ej.) Armas, las cuales tienen un x e y y una imagen, creo mi arraylist del tipo Armas, pero mi problema llega al querer agregar las armas con la posicion, etc

    HELP?

    1. Hola Raul,

      Si tienes la clase (escribo seudo-código)

      class arma {

      int x;

      int y;

      Imagen img;

      //Setter y getters…

      }

      Simplemente intanciala, añadele los valores y añádela al listado:

      Arma arma = new Arma();

      arma.setX(100);

      arma.setY(200);

      arma.setImg(imagen);

       

      ArrayList armas = new ListView();

      armas.add(arma);

  47. Hola, excelente post, estaba estudiando por curiosidad el código de el Algoritmo de Kruskal para java que encontré en la wikipedia y me di cuenta que trabaja con ArrayList… me pudieran explicar más a fondo como funciona?

  48.           Object[] objeto=new Object[helados.size()];
               
               for (int i = 0; i < objeto.length; i++) {
                   objeto[i]=((cremas)helados.get(i)).getsabor();
                    }
               Object seleccionarsabor =JOptionPane.showInputDialog(null, "que sabor desea:","sabor",JOptionPane.QUESTION_MESSAGE,null,objeto, null);
                    
                  }

    como para cuando escoja un sabor me muestra la posicion del sabor en la lista ?

     

    1. No entiendo que quieres hacer. Si quieres parar el bucle mejor utiliza un while y así tendrás exactamente la posición cuando la encuentres.

  49. Este post esta buenazo, Sinembargo tengo un duda, si tengo un ArrayList<Solicitud> en un metodo añado las solicitudes(elementos del arrayList), pero en otro metodo modifico un elemento de ese ArrayList y lo que deseo es que guarde el objeto del ArrayList modificado y no que cree otro, es posible? tendrán un ejemplito de ello?

  50. Me parece excelente la explicación, pero tengo un duda si tengo un ArrayList<BotonCarta> de manera global y en un metodo añado las cartas(elementos del arrayList) pero en otro metodo debo modificar un elemento de ese ArrayList y que se vea reflejado globalmente es como decirle al Array que guarde el objeto modificado y no que cree otro y lo guarde es posible?

    1. Hola Jurgen. Si creas una variable global con un listado, todo lo que modifiques en ésta será vista la modificación por todo aquel quien le llame.

  51. Hola muy interesante post. quiero consultarles si es posible utilizar ArrayList para hacer comparaciones entre 2 ArrayList de tipo object, en general va a contener cadenas , fechas.

    Esta consulta parte de la idea de comparar 2 tablas de datos y obtener las diferencias x cada campo comparado.

    espero me deje entender.

    gracias

    1. Sí se puede realizar comparaciones de ArrayList de objetos con compareTo. Tienes un ejemplo en http://jarroba.com/ordenar-un-arraylist-en-java/

  52. Tengo un problema con la agregación o impresión de un arrayList, lo que sucede es que cuando le agrego mas de un elemento a mi arrayList de objetos y le doy imprimir me bota por pantalla el todos los nodos del arrayList con el ultimo que le agregue como si los antesesoroes del ultimo tomaran su valor, no sé si es que estoy agregando mal o imprimiendo mal gracias
    Ahí va mi codigo

    import java.util.*;

    public class Acciones {

    static ArrayList obj = new ArrayList();
    Objetos banda = new Objetos(); // es donde se encuentran los objetos con su get/ set(para cada uno) constructores necesarios

    public void agregar(String bateria, String guitarra, String bajo, String microfono) {
    banda.setBateria(bateria);
    banda.setGuitarra(guitarra);
    banda.setBajo(bajo);
    banda.setMicrofono(microfono);
    if(obj.add(banda)){
    System.out.println(«\nTu banda es una realidad\n»);
    mostrar();
    }else{
    System.err.println(«\nTu banda no es una realidad\n»);
    }
    }

    public void mostrar() {
    Iterator itrband = obj.iterator();
    while (itrband.hasNext()) {
    Objetos banda = itrband.next();
    System.out.println(«El bateriasta es: » + banda.getBateria());
    System.out.println(«El guitarrista es: » + banda.getGuitarra());
    System.out.println(«El bajista es: » + banda.getBajo());
    System.out.println(«El vocalista es: » + banda.getMicrofono() + «\n»);
    }
    }
    }

    public class Main {

    public static void main(String[] args) {
    Scanner leer = new Scanner(System.in);
    Acciones act = new Acciones();
    int opcion;
    do {
    System.out.println(» Crea tu banda»);
    System.out.print(«Ingrese un baterista: «);
    String batero = leer.next();
    System.out.print(«Ingrese un guitarrista: «);
    String guitar = leer.next();
    System.out.print(«Ingrese un bajista: «);
    String bajo = leer.next();
    System.out.print(«Ingrese un vocalista: «);
    String vocal = leer.next();
    act.agregar(batero, guitar, bajo, vocal);
    System.out.println(«¿Desea crear otra banda? \n 1.-Si\t 2.-No»);
    opcion = leer.nextInt();
    } while (opcion == 1);
    act.mostrar();
    }
    }

    Y aqui va como imprime
    Crea tu banda
    Ingrese un baterista: carmine
    Ingrese un guitarrista: jeff
    Ingrese un bajista: bully
    Ingrese un vocalista: tony

    Tu banda es una realidad

    El bateriasta es: carmine
    El guitarrista es: jeff
    El bajista es: bully
    El vocalista es: tony

    ¿Desea crear otra banda?
    1.-Si 2.-No
    1
    Crea tu banda
    Ingrese un baterista: el
    Ingrese un guitarrista: tu
    Ingrese un bajista: yo
    Ingrese un vocalista: ella

    Tu banda es una realidad

    El bateriasta es: el
    El guitarrista es: tu
    El bajista es: yo
    El vocalista es: ella

    El bateriasta es: el
    El guitarrista es: tu
    El bajista es: yo
    El vocalista es: ella

    ¿Desea crear otra banda?
    1.-Si 2.-No
    2
    El bateriasta es: el
    El guitarrista es: tu
    El bajista es: yo
    El vocalista es: ella

    El bateriasta es: el
    El guitarrista es: tu
    El bajista es: yo
    El vocalista es: ella
    Espero que me pueda ayudar con eso gracias

    1. El ArrayList guarda un puntero a cada objeto. Cuando agregas una nueva banda, lo que haces es reutilizar el puntero del objeto anterior, por lo que al final el ArrayList tienes un montón de punteros apuntando al mismo objeto, de ahí que te salgan todos iguales.
      Para que quede más claro, te recomiendo que nombres mejor al «Objeto» como «Banda» y al ArrayList «obj» como «bandas» (un List siempre en plural, ya que guarda varios objetos). Quedando:
      Banda banda = new Banda();
      static ArrayList bandas = new ArrayList();

      De cualquier manera cada objeto banda se ha de crear cada vez que queramos añadirlo a la lista de bandas, por lo que en el método «agregar()» tienes que hacer el Banda banda = new Banda(); y no como global

      1. Muchas gracias, la verdad yo lo había hecho una vez como el problema que plantee y me funcionaba, pero bueno no importa, ahora si me funciona como usted me lo acabo desugerir, gracias me sirvió mucho

      2. Pero no entiendo porque poniendo a Banda banda = new Banda(); como global es distinto que ponerla dentro de un metodo

        1. Si la pones como global, solo se crea la primera vez que se crea el objeto que has llamado «Acciones». Si la pones dentro del método, se crea cada vez que se llama al método.

  53. Hola chicos, antes que nada agradezco su inmensa ayuda, sus web es simplemente genial, gracias.

    una duda!

    debo crear un ArrayList, y debo limitarlo, es decir introducir una cantidad de datos hasta llegar a la posición 50.¿Existe un método para definir el tamaño del ArrayList?

    había pensado algo así:
    (…)
    método introducirDatos (String dato){

    if (nombreArrayList.size()<50) {
    nombreArrayList.add("dato");
    }else{
    System.out.println ("no se ingresaron los datos")
    }
    }
    (…)

    Gracias por su ayuda!

    1. Hola camilo.
      Para hacer lo que comentas debes de utilizar un array no un arraylist ya que necesitas una estructura de datos estatica y que no exceda de 50 posiciones.

      Si el tamaño de un arraylist se puede limitar no lo se, pero no es la finalidad de un arraylist que se limite ya que su finalidad es exactamente la contraria, la que puedas insertar y manipular elementos sin importar el número de ellos (siempre obviamente que quepan en memoria 😉 )
      SL2

      1. Gracias por responder!

        necesitaba la aclaración, estoy en un curso de programación y nos han pedido en un ejercicio usar arraylist, pero no debe exceder los 50 datos , en fin, me quedó claro, muchas gracias

  54. Excelente post! me han aclarado muchas dudas, aunque queda una y es la siguiente:

    has usado iterator para recorrer un ArrayList de ArrayList y, aunque he tratado de enterderle lo mejor posible, quisiera saber si se puede recorrer/obtener los datos de un arraylist de arraylist sin iterator?

    Por ejemplo, como se hace en un arrayList simple, con un ciclo for(i=0; i<miarraylist.size(); i++)….

    Agradeceria muchisimo su ayuda. Y, de nuevo, Gracias por compartir este buen post!!

    1. Hola Jimmy.
      Si que se puede recorrer un ArrayList sin el iterador y eso se hace con un «foreach». Si por ejemplo tuvieses un ArrayList de Strings, tendrias que recorrer el ArrayList de la siguiente forma:

      ArrayList<String> nombreArrayList = new ArrayList<String>()
      nombreArrayList.add("Primero");
      nombreArrayList.add("Segundo");
      .......
      .......
      for(String elemento: nombreArrayList){
      System.out.println(elemento)
      }

      Como resultado se imprime por pantalla cada elemento del ArrayList.
      Dentro del «for» (que se comporta como un «foreach») ya puedes tratar el objeto del ArrayList. En este caso el elemento es de la Clase «String» pero puede ser cualquier otro como por ejemplo de la clase «PartidoFutbol» como en el ejemplo que hemos puesto. Para recorrer por ejemplo un ArayList de objetos de la clase «PartidoFutbol» se recorrería de la siguiente forma:


      for(PartidoFutbol partido: partidos){
      // Aqui hacer lo que sea con el objeto "partido"
      }

      Espero que te haya ayudado con la respuesta ya que tu pregunta ha sido muy buena porque se me pasó explicar como recorrer un ArrayList con un «foreach»
      Muchas Gracias por tu pregunta.
      SL2

      1. Gracias por responder tan rapido.. La ultima duda (espero haha): Es posible hacer lo del ForEach pero con un ArrayList Multidimensional?

        Te pregunto por el siguiente problema:

        He guardado un ArrayList dentro de otro ArrayList (ArrayList multidimensional) pero ahora quiero obtener los primeros datos de cada ArrayList interno, es posible hacer esto:

        miArrayListMulti.get(0).get(1);

        o si fuera dentro de dos for:

        miArrayListMulti.get(i).get(j);

        suponiendo que «i» es la variable del for externo y «j» del for interno..

        Es posible hacer esto??

        No creas que no estoy haciendo pruebas, pero es mejor preguntar a alguien que sabe para que pueda corregirme o dar alguna indicacion.. por eso pregunto 😀

        Gracias de antemano. Saludos!!

        1. Hola Jimmy.
          Claro que se puede recorrer así también y de la siguiente forma (suponiendo que «miArrayListMulti» sea un ArrayList>):

          for(int i=0; i<miArrayListMulti.size(); i++){
          for(int j=0; j<miArrayListMulti.get(i).size(); j++){
          // Aqui accedes al objeto del ArrayList
          miArrayListMulti.get(i).get(j);
          }
          }

          Si te surge alguna duda más de carácter más general puedes preguntar a través del foro (http://jarroba.com/foro/)
          SL2

  55. Excelente blog, muy bien explicado.
    Mi pregunta:
    Sucede que al usar el método para ingresar un objeto al arrayList, me esta sobrescribiendo todo el arreglo con la ultima entrada. e intentado asignando la posición a cada entrada, pero aun así lo sigue haciendo.

    Un bloque del Código:

    ArrayList listaProcesos = new ArrayList(); // ArrayList creado con el tipo de la clase
    private int nProcesos = 0; //Numero de objetos creados y guardados en el ArrayList, esta misma variable maneja la posicion en la que se guarda el objeto en el ArrayList

    // Este metodo se encarga de crear el objeto y guargalo en el ArrayList.

    public void iniciar(String nombre, int prioridad, double quantum, double useP,String user,int estado, int pos)
    {
    Proceso lista = new Proceso(nombre,prioridad,quantum,useP,user,estado,pos);

    listaProcesos.add(pos,lista);

    JOptionPane.showMessageDialog(null, «Posicion: «+String.valueOf(nProcesos));

    lista = null;
    }

    iniciar(«Calculadora», 1, 0.2, 10, «/», 0, nProcesos); // Llamados al metodo anterior y le enviamos los parametros
    nProcesos ++;
    iniciar(«Paint», 2, 0.2, 10, «/», 0, nProcesos);
    nProcesos ++;
    ——————————————————————-

    1. Es como si no se modificara la posición y por tanto se sobrescribe la actual. Prueba sin pos, es decir: listaProcesos.add(lista). Para las posiciones casi mejor que utilices un HashMap, donde la key sea el id (puede ser tu id).

  56. Excelente entrada, me ha servido mucho.. Pero una pregunta. ¿Hay una manera eficiente de «resetear» un iterador? ¿O tengo que crear otro para volver a iterar una Array List? Intenté la segunda pero no me funciono, al imprimir me muestra el último elemento de la lista.

    1. Hola David. Fijate en el segundo y tercer fragmento de código como en el segundo instancio el iterator llamado «nombreIterator» y en el tercer fragmaneto de código vuelvo a utilizar el mismo iterator («nombreIterator = nombreArrayList.iterator();»).

      Espero que esto te sirva de ayuda.

      SL2

  57. A mi en ArrayList me da el error «The type ArrayList is not generic; it cannot be parameterized with arguments «.

    No he encontrado ninguna solución en internet. Tengo una versión de JRE superior a la 1.5, el Eclipse más actual…

    Probando a importart otras clases, la de «java.util.ArrayList» me da el error «The import java.util.ArrayList conflicts with a type defined in the same file».

    No tengo ni idea de qué más puedo hacer y no hay idioma en que me den solución. ¿Alguna idea maravillosa?

    Muchas gracias.

    1. Hola Bor,

      Aunque tengas instalada la versión superior a la 1.4 de Java, posiblemente el proyecto de Elcipse esté utilizando una versión más antigua para compilar y hay que cambiarla. Lo primero es que instales la última versión del JDK de Java, a la 1.8, en http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html.

      Una vez descargado vete en Eclipse sobre tu proyecto botón derecho y selecciona «Properties». En la ventana que se abre en la columna de la izquierda selecciona «Java Build Path» y en la pestaña «Libraries» selecciona la librería JRE que hay y pulsa «Edit…» comprueba que si está seleccionado «Workspace default JRE» ponga entre paréntesis jre1.5_xx o superior. De no ser así selecciona «Alternate JRE» y busca la instalación de Java (en la otra ventana que se abre pulsa «Add…» y cuando la añadas marca su casilla) que tienes más moderna (al ser posible la 1.8).

      Volvemos a las «Properties» y en la columna de la izquierda seleccionamos «Java Compiler». En esta parte comprobamos que donde pone «Compiler compliance level» marque 1.5 o mayor (al ser posible 1.8), la elegimos para que funcione (si no te deja seleccionar, marca la casilla «Enable project specific settings»).

      1. Nada, no hay manera. Sigue dando los mismos errores.

        Gracias igualmente por la ayuda y la respuesta rápida, aunque no sé muy bien qué hacer ahora.

        1. Puedes pasarme el código y le echo un vistazo, por si fuera algo de la implementación. Aunque por el error me inclino más por la configuración de Java, prueba a descargarte de nuevo Eclipse Luna y mira a ver.

          1. Tengo todo lo nuevo recién instalado, por eso no termino de entender por qué tanto lío.

            El error se quita si lo dejo como «ArrayList nombreArrayList = new ArrayList();». Pero claro, así tampoco puedo utilizarlo como quiero.

            Yo también asumo que es algún problema de configuración (a fin de cuentas, el código era copiar y pegar del vuestro), pero he tocado ya unas cuantas cosas y todavía no he conseguido arreglarlo.

          2. Prueba a llamar a algún método del ArrayList, por ejemplo al de add() para añadir. Aunque sea un error de configuración así descartamos completamente que se haya copiado algún carácter que provoque el error.

          3. No, no parece ser el problema.

            Pero he descubierto que también me da problemas con los maps. Cualquier función del iteratoro los hasnext() por ejemplo, los reconoce como error.

            Supongo que el problema de todo está en algún fallo de configuración, pero empiezo a tener la sensación de que el programa tampoco pretende hacerme mucho caso.

  58. Una Pregunta:

    Bueno primero excelente post!!!!, segundo tengo una duda con respecto al manejo de ArrayList con datos obtenidos desde una BD, hago la conexión con la BD y obtengo los datos de una tabla y los guardo en un ArrayList con este código:

    package Negocio;

    import Conexion.*;
    import DTO.*;
    import java.util.ArrayList;
    import javax.swing.JOptionPane;

    /**
    *
    * @author dvenegas
    */
    public class NegocioMovimientoZonas {

    private Conexion conec1;

    /**
    * @return the conec1
    */
    public Conexion getConec1() {
    return conec1;
    }

    /**
    * @param conec1 the conec1 to set
    */
    public void setConec1(Conexion conec1) {
    this.conec1 = conec1;
    }

    /**
    * metodo para configurar la conexion
    */

    public void configurarConexion()
    {
    this.setConec1(new Conexion());
    this.getConec1().setNombreBaseDeDatos(«jdbc:db2://172.16.11.100:50000/IBMSE»);
    this.getConec1().setNombreTabla(«hist.areazonelist»);
    this.getConec1().setCadenaConexion(«com.ibm.db2.jcc.DB2Driver»);
    this.getConec1().setUsuario(«db2admin»);
    this.getConec1().setPass(«Db2Adm1n»);
    } //Fin configurar

    public ArrayList retornaPersonasActivas()
    {
    ArrayList auxListaPersonas = new ArrayList();
    this.configurarConexion();
    this.getConec1().setCadenaSQL(«SELECT * FROM » +
    this.getConec1().getNombreTabla() + » ORDER BY ENTERDAT DESC»);
    this.getConec1().setEsSelect(true);
    this.getConec1().conectar();

    try
    {
    while(this.getConec1().getDbResultSet().next())
    {
    PersonaActivaZona auxPersonaActiva = new PersonaActivaZona();

    auxPersonaActiva.setLeavedat(this.getConec1().getDbResultSet().getTimestamp(«leavedat»));
    auxPersonaActiva.setEnterdat(this.getConec1().getDbResultSet().getTimestamp(«enterdat»));
    auxPersonaActiva.setZoneid(this.getConec1().getDbResultSet().getInt(«zoneid»));
    auxPersonaActiva.setItemid(this.getConec1().getDbResultSet().getInt(«itemid»));
    auxPersonaActiva.setTagid(this.getConec1().getDbResultSet().getString(«tagid»));
    auxPersonaActiva.setZonename(this.getConec1().getDbResultSet().getString(«zonename»));
    auxPersonaActiva.setLastname(this.getConec1().getDbResultSet().getString(«lastname»));
    auxPersonaActiva.setFirstname(this.getConec1().getDbResultSet().getString(«firstname»));
    auxPersonaActiva.setCompname(this.getConec1().getDbResultSet().getString(«compname»));

    auxListaPersonas.add(auxPersonaActiva);
    } //Fin while
    }
    catch(Exception ex)
    {
    JOptionPane.showMessageDialog(null, «Error SQL » + ex.getMessage());
    } //Fin try cargar arraylist

    return auxListaPersonas;
    } //Fin retorna cliente
    }

    Luego de esto lo muestro en pantalla recorro y lo muestro en pantalla en una «Table» con el siguiente código:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    NegocioMovimientoZonas auxNegocioActiva = new NegocioMovimientoZonas();

    Iterator iter = auxNegocioActiva.retornaPersonasActivas().iterator();

    DefaultTableModel modelo = new DefaultTableModel();

    modelo = (DefaultTableModel) this.jTableActiva.getModel();
    modelo.setRowCount(0);
    int fila = 0;

    while (iter.hasNext())
    {
    Object[] num = {};
    modelo.addRow(num);

    PersonaActivaZona auxActiva = new PersonaActivaZona();
    auxActiva = (PersonaActivaZona) iter.next();

    this.jTableActiva.setValueAt(auxActiva.getEnterdat() , fila, 0);
    this.jTableActiva.setValueAt(auxActiva.getLeavedat(), fila, 1);
    this.jTableActiva.setValueAt(auxActiva.getZoneid(), fila, 2);
    this.jTableActiva.setValueAt(auxActiva.getItemid(), fila, 3);
    this.jTableActiva.setValueAt(auxActiva.getTagid(), fila, 4);
    this.jTableActiva.setValueAt(auxActiva.getZonename(), fila, 5);
    this.jTableActiva.setValueAt(auxActiva.getLastname(), fila, 6);
    this.jTableActiva.setValueAt(auxActiva.getFirstname(), fila, 7);
    this.jTableActiva.setValueAt(auxActiva.getCompname(), fila, 8);

    fila++;

    }

    }

    Hasta ahí todo muy bien y sin problema, mi consulta va a como puedo hacer para agregar a este ArrayList nuevas «Personas Activas» y si ya existe en la lista solo actualizar el campo fecha y la zonaid, y para eliminar un registro.

    El dato TagID es el dato llave o Primary Key si se entiende.

    Espero me puedan ayudar.

    Saludos

    1. Hola Danilo,

      para concatenar una ArrayList en otro tienes que utilizar addAll(Collection c) .
      Para ver si existe puedes crear un ArrayList de objetos y utilizar la función contains(Object o), que te devuelve true si existe; o directamente trayendote el dato con get(int index). Luego solo te quedará actualizar los datos que necesites. Te aconsejo que eches un vistazo en http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

  59. Muy útil todo (Especialmente lo del iterator) … muy buen post! Pero tengo una pregunta, hay alguna forma de ordenar los Array? Por ejemplo, si tenemos una lista de numeros, que el numero menor esté en la posición 0? Sé que es con el compareTo pero no se como cambiarlos de campo de memoria, agradecería la respuesta.

    1. Buenas Alejandro,
      Lo primero decirte que tienes la solución en esta entrada: http://jarroba.com/ordenar-un-arraylist-en-java/
      Es mejor que utilices un algoritmo de ordenación ya creado por Java para estas cosas (así no tienes que crear tu el mismo que ya existe y te ahorras ese trabajo 😀 ). Puedes usar el método sort() para ordenar del siguiente modo:
      ArrayList nombreArrayList = new ArrayList();
      Collections.sort(nombreArrayList);
      De esta manera tendrás la variable «nombreArrayList» ordenada de menor a mayor.

  60. Hola!
    ¿Como podria verificar si un objeto ya ha sido guardado antes en el arrayList?
    para no volverlo a ingresar.

    1. Hola Estuardo. Si el ArrayList es de datos «atómicos» u objetos propios de java lo puedes hacer con el método «contains», que eso supongo que lo sabrás.
      Por otro lado si lo que quieres ver es si existe un objeto de una clase que te has creado tu, lo suyo es crearte un método que lo puedes llamar por ejemplo «hasInArrayList(Object object)» y programarte este método para que recorra los elementos del ArrayList y compare sus atributos uno a uno para ver si los objetos son iguales. Recuerda que si le pasa como parámetro el objeto, aunque ese objeto tenga los mismos datos en sus atributos, considerará que son objetos distintos porque tienen distinta referencia (o puntero).

      Por otro lado te recomiendo que si quieres hacer comprobaciones de este tipo y cada uno de los objetos de la lista que tienes van a estar diferenciados siempre por un atributos (es decir que tendrá un atributos id o algo así), te recomiendo que utilices la estructura de datos de los «MAP» (aquí te dejo la entrada para que sepas como funcina: http://jarroba.com/map-en-java-con-ejemplos/) que esta estructura de datos es más apropiada para hacer lo que supongo que quieres hacer, porque esa comprobación que quieres hacer con ArrayList la tienes que programar tu, mientras que si utilizas MAP y tienes un atributo diferenciado eso te lo hará muy rápido.

      SL2

      1. ¡Buenas!

        Sólo una puntualización relativa al diseño.

        El método contains() hace uso del método equals() (ver http://docs.oracle.com/javase/7/docs/api/java/util/List.html#contains%28java.lang.Object%29), y lo puedes usar tanto para tipos primitivos o clases propias de java, como para tus propias clases también. De hecho, lo ideal siempre es, si la API de java te da la opción, haz uso de ella.

        Para asegurarte que el contains() funciona correctamente, lo único que tienes que tener en cuenta es que tu clase (la de los objetos que van a ir en la lista) debe implementar los métodos equals() (y hashCode()). En esos métodos queda en tu mano decidir cuándo consideras que dos objetos de tu clase son iguales; algunos IDEs de desarrollo, como por ejemplo eclipse, te dan la opción de generar estos dos métodos automáticamente en función de los atributos de clase. Si usas eclipse: Source –> Generate hashCode() and equals().

        Saludos.

  61. Una pregunta, como podria hacer un Array de dos dimenciones pero dinamico, es decir que no dependa del tamaño del arreglo y que en cualquier momento, pueda agregar elementos al arreglo y que pueda ser de esta forma

    1 Cadena fecha valor1 valor2
    1 Cadena fecha valor1 valor2
    1 Cadena fecha valor1 valor2
    1 Cadena fecha valor1 valor2
    1 Cadena fecha valor1 valor2

    Existe algun metodo que permita hacer esto?? lo he intendado con ArrayList o ArrayCollection pero no he encontrado la forma

    1. Hola Moises. Esto se puede hacer con un ArrayList de ArrayList. Esto esta explicado en esta entrada. Se que es un poco complicado de entender al principio (porque a mi también me costo), pero para hacer esto se requiere ya un conocimiento importante en el manejo de los ArrayList. Con lo la información que me das no te puedo decir mucho más, pero ya te digo lo que planteas se hace con un ArrayList de ArrayList.
      SL2

  62. Buenas tardes, tengo un problema que no puedo resolver el cual es el siguiente:
    Tengo 4 arrayList :
    String datos=””;
    private ArrayList concepto = new ArrayList();
    private ArrayList persona = new ArrayList();
    private ArrayList pago = new ArrayList();
    private ArrayList Concatenacion_concepto = new ArrayList();

    /*
    La variable concepto es para el eje x
    La variable persona es para el eje y
    Y la variable pago es aquella en donde algunas personas pagaron ciertas cuentas.

    Uso el siguiente proceso para comparación:
    */
    for (int y = 0; y < persona.size(); y++) {
    datos =persona.get(y).getNombre() + ";"
    + persona.get(y).getCve_persona () + ";"
    + persona.get(y).getStatus();
    for (int x = 0; x < concepto.size(); x++) {
    if ((concepto.get(x).getCve_concepto() == adeudo.get(x).getCve_concepto())) {
    if ((persona.get(y).getCve_persona() == adeudo.get(x).getCve_cliente())) {
    datos += "; X ";
    }
    } else {
    datos += "; O ";

    }
    }
    Concatenacion_concepto.add(datos);
    }
    /*
    El problema que tengo que al momento de comparar datos, me marca el siguiente error:
    java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    y no tengo idea de cómo compararlo ¿alguna sugerencia?
    Saludos
    */

    1. Buenas Jesús,

      el problema que indicas es porque intentas acceder a una posición del índice del ArrayList que no existe (comprueba que los for no se pasen de los elementos que tengas almacenados en los ArrayList). De todas maneras, para recorrer ArrayList recomendamos mejor usar Iterator.

      1. De hecho encontré la solución, solo era de agregar un tercer ciclo for:

        int validar = 0;
        for (int y = 0; y < persona.size(); y++) {
        datos = persona.get(y).getNombre() + ";"
        + persona.get(y).getCve_perosna() + ";"
        + persona.get(y).getStatus();
        for (int x = 0; x < concepto.size(); x++) {
        for (int z = 0; z < adeudo.size(); z++) {
        if ((adeudo.get(z).getCve_cliente() == persona.get(y).getCve_persona()) && (adeudo.get(z).getCve_concepto() == concepto.get(x).getCve_concepto())) {
        validar = 1;
        }
        }
        if (validar == 1) {
        datos += ";X";
        } else {
        datos += "; ";
        }
        validar = 0;
        }
        Concatenacion_concepto.add(datos);
        datos = "";

        y ya con esto me trae lo que necesito de información, de todas forma muchas gracias

  63. Estimados, tengo un problema tremendo con arraylist y quisiera que, si no es mucha molestia, me pudieran instruir en dónde está mi error, dado que he probado de todo ya y, o se me cuelga la ejecución del programa o no da el resultado esperado, la verdad es que me estoy volviendo loco!

    Les detallo: necesito un programa que lea objetos de tipo container, que tienen algunos atributos a saber: nombre, puerto de carga, puerto de descarga, tipo y peso, y que luego me los muestre por pantalla.

    Yo ya hice la clase «Containers» en donde desarrollé, como ustedes aca con los partidos, los atributos del objeto container:
    Variables
    nombre: de tipo string
    puertoCarga: tipo string
    puertoDescarga: tipo string
    tipo: tipo integer (ya que necesito saber si son de 20 o de 40 nomás) (calculo que también podría ser boolean)
    peso: de tipo float

    y sus «Getters» and «Setters»

    con eso tengo la clase para luego poder crear objetos de tipo Container con los atributos mencionados.

    hasta ahí todo bien, el problema está en que en el main desarrollé los métodos «cargarcontainers» y «mostrarcontainers» y, o me da un error la ejecución o no me da lo que necesito, y el tema es que es tan tonto lo que necesito que me da hasta verguenza no saber resolverlo! y seguro que la solución la tengo al alcance de la mano pero no logro darme cuenta, por eso, me tomo el atrevimiento de copiarles mi código para ver si ustedes pueden explicarme cuál es mi error:

    import java.util.*;
    public class Principal{

    static ArrayList containers = new ArrayList (); //Aca voy a guardar los containers que vaya leyendo
    static Scanner sc = new Scanner (System.in); //Scanner para leer datos de teclado

    public static void main (String [] args){
    cargarContainers();

    System.out.println(«»);
    System.out.println(«Lista de containers:»);
    System.out.println(«Containers: » + containers.size());
    System.out.println(«»);

    mostrarContainers();

    System.out.println(«»);
    System.out.println(«Todos los containers han sido mostrados!»);

    }//Fin del método Main

    public static void cargarContainers (){
    String nombre;
    String puertoCarga;
    String puertoDescarga;
    int tipo;
    int peso;
    int N;
    Containers aux = new Containers ();

    System.out.println(«Ingrese el número de Containers para cargar: «);
    N=sc.nextInt();

    for (int i=0; i<N; i++){
    sc.nextLine();
    System.out.println("");
    System.out.println("Container N° " + (i+1) + " : ");
    System.out.println("Nombre: ");
    nombre = sc.nextLine();
    aux.setNombre(nombre);

    System.out.println("Puerto de Carga: ");
    puertoCarga = sc.nextLine();
    aux.setPuertoCarga(puertoCarga);

    System.out.println("Puerto de Descarga: ");
    puertoDescarga = sc.nextLine();
    aux.setPuertoDescarga(puertoDescarga);

    System.out.println("Tipo (20 / 40): ");
    tipo = sc.nextInt();
    aux.setTipo(tipo);

    System.out.println("Peso: ");
    peso = sc.nextInt();
    aux.setPeso(peso);

    containers.add(aux); //Con esta orden deberían poder guardarse todos los atributos en el arraylist

    }//Fin del for
    }//Fin del método

    public static void mostrarContainers (){

    Iterator itrContainers = containers.iterator();
    while(itrContainers.hasNext()){
    Containers aux = itrContainers.next();
    System.out.println(aux.getNombre()+ » »
    + aux.getPuertoCarga() + «-»
    + aux.getPuertoDescarga() + » »
    + aux.getPeso() + » »
    + aux.getTipo());
    }

    }

    }//Fin de la clase principal

    Resulta que cuando ejecuto el programa me da el número exacto de los containers cargados, pero si cargué digamos 5 containers, me imprime por pantalla el último cargado 5 veces seguidas y no 1 vez cada uno!!!

    Perdón por la extensión, pero me vendría genial que puedan ayudarme con este problemita!
    Desde ya muchísimas gracias!

    1. Buenas Mariano,

      El problema que tienes es que el objeto aux del tipo Containers en el ArrayList es referenciado (referenciado es que apunta al objeto, no que guarda una copia del mismo). Como solo haces un new Container() antes del for este se guarda la referencia la primera vez en el ArrayList con los datos que le has puesto; la siguiente vez se guarda en el mismo objeto otros datos y se referencia el mismo objeto en otra posición del ArrayList. Hasta aquí tenemos un mismo objeto referenciado dos veces por el ArrayList, por lo que en todas las posiciones del ArrayList obtenemos los mismos datos. La solución, simplemente añade el Containers aux = new Containers(); dentro del for al principio de este para que se cree un nuevo objeto para cada referencia de cada posición del ArrayList.

      Otra recomendación, parametriza el ArrayList y el Iterator siempre:
      static ArrayList containers = new ArrayList();
      Iterator
      itrContainers = containers.iterator();

  64. Muchisimas gracias … Me has resuelto muchas dudas tus ejemplos son claros y utiles, gracias por la ayuda 🙂

    1. Tengas lo que tengas que hacer (bien sea un array o arraylist) debes de recorrerlo de forma ordenada y en tu caso ir sumandolo. Siempre en estos casos debes de recorrer los arrays de forma ordenada (por algo tienen un indice).
      SL2

  65. soy principiante tengo mucho interés en aprender en java y poder explicar a mis compañeros que también están con el mismo problema y me confundo mucho sobre donde tienen que ir varias cosas por ejemplo si quiero eliminar o modificar un objeto, por ahorita estoy aprendiendo como utilizar el arraylist gracias por tan buena información…..

    1. Buenas Lazaro,
      mucho ánimo a este mundo de Java, ya verás como es apasionante y en poco te convertirás en todo un experto 😀
      Y ya sabes que puedes contar con nosotros ante cualquier duda que necesites aclarar.

  66. Hola muy bueno tu blog tengo una pregunta algo fuera del tema….Pues tengo un arreglo String ( no array)…..que contiene nombres de personas…..pues resulta que necesito borrar un nombre de esa lista….pero como no utilizo objetos lo queria borrar por medio de su posicion pero me da el error de que al momento de comparar la posicion que quiero borrar con el arreglo….me dice que no es compatible un java String con un int.

    como podria borrar un nombre mandandole yo la posicion que quiero borrar ?

    1. Buenas Carlos,
      Cuando te refieres a arreglo no array, ¿a que tipo de estructura de datos te refieres? ¿List, ArrayList, HashMap, etc? Normalmente todas las estructuras de datos tienen alguna función de eliminación de elementos.
      Después, sobre lo que comentas de la compatibilidad String con int, huele a que estás comparando justo eso. Prueba un truco sencillo, que es en el momento de la comparación y si la variables se llaman X e Y, sumarles unas comillas vacías; es decir, hacer un X+»» y un Y+»» , con esto conviertes a String las dos variables y no deberías de tener problemas. También recuerda que para comparar Strings se hace con la función equals(), como por ejemplo:
      (X+»»).equals(Y+»»)

  67. Hola!
    Muy bueno tu post, pero tengo una pregunta, cuando digo que quiero imprimir los datos contenidos en mi ArrayList
    System.out.println(«Primera Posición»+lstUnidades.get(3));

    En este caso la posicion 3, obtengo lo siguiente:

    «Primera PosiciónModelo.VOUnidadMedida@23e94776»

    ¿Cómo logro acceder al dato? Esta parece la dirección del objeto pero no su contenido, ¿Por qué se presenta esto?

    Te agradezco un montón!

    1. Buenas Alex.
      Entiendo que «lstUnidades» es un arrayList de objetos de alguna clase que tu te has creado. Entonces lo que te esta dando es ese objeto en un string. Si por ejemplo ese objeto tuviese un atributo «nombre» y tuvieses el método get implementado (ejm: getNombre) para imprimir tendrías que poner lo siguiente:
      System.out.println(“Primera Posición”+lstUnidades.get(3).getNombre());
      De esta forma se te imprimiria el atributo nombre del objeto.
      Supongo que es eso lo que te pasa, pero con la información que me das no te puedo ayudar mas. Cualquier cosa vuelve a escribir.
      SL2

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies